SafeAllocBlob

VOID *__stdcall SafeAllocBlob(
        UINT64 HeaderSize,
        UINT64 NumElements,
        UINT64 ElementSize,
        UINT64 NumElements2,
        UINT64 ElementSize2,
        UINT64 *TotalSizeOut){
  unsigned __int64 v6; 
  unsigned int v7; 
  unsigned __int64 v8; 
  unsigned int v9; 
  size_t v10; 
  VOID **PoolWithTag; 
  VOID **v12; 

  v6 = (unsigned int)ElementSize * (unsigned __int64)(unsigned int)NumElements;
  if( v6 > 0xFFFFFFFF )
    return 0i64;
  v7 = v6 + HeaderSize;
  if( (int)v6 + (int)HeaderSize < (unsigned int)HeaderSize )
    return 0i64;
  v8 = (unsigned int)ElementSize2 * (unsigned __int64)(unsigned int)NumElements2;
  if( v8 > 0xFFFFFFFF )
    return 0i64;
  v9 = v7 + v8;
  if( v7 + (unsigned int)v8 < v7 )
    return 0i64;
  if( TotalSizeOut )
    *(_DWORD *)TotalSizeOut = v9;
  if( !v9 )
    return 0i64;
  v10 = v7 + v8;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, v9, 1920232557i64);
  v12 = PoolWithTag;
  if( PoolWithTag )
    memset(PoolWithTag, 0i64, v10);
  return v12;
}

Referenced by:

RtlpMuiRegCreateLanguageConfigList
RtlpMuiRegCreateLanguages
RtlpMuiRegCreateStringPool