PnpAllocateMultiSZ

INT64 __stdcall PnpAllocateMultiSZ(WCHAR *InString, UINT64 MaxLength, WCHAR **OutString){
  UINT8 **v3; 
  UINT8 **v4; 
  NTSTATUS MultiSzLength; 
  ULONGLONG v7; 
  UINT8 *PoolWithTag; 
  __int64 v9; 
  __int64 v10; 
  ULONGLONG pullResult; 
  ULONGLONG ullMultiplicand; 
  v4 = v3;
  ullMultiplicand = 0i64;
  pullResult = 0i64;
  MultiSzLength = 0;
  *v3 = 0i64;
  if( InString )
  {
    MultiSzLength = PnpGetMultiSzLength(InString, MaxLength, &ullMultiplicand);
    if( MultiSzLength >= 0 )
    {
      v7 = ullMultiplicand;
      if( ullMultiplicand > 2 )
      {
        MultiSzLength = RtlULongLongMult(ullMultiplicand, 2ui64, &pullResult);
        if( MultiSzLength >= 0 )
        {
          PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, pullResult, 0x57706E50ui64);
          *v4 = PoolWithTag;
          if( PoolWithTag )
          {
            memmove(PoolWithTag, (UINT8 *)InString, pullResult);
            v9 = 2 * v7;
            v10 = 2i64;
            do
            {
              v9 -= 2i64;
              *(_WORD *)&(*v4)[v9] = 0;
              --v10;
            }
            while( v10 );
          }
          else
          {
            return(unsigned int)-1073741670;
          }
        }
      }
    }
  }
  return(unsigned int)MultiSzLength;
}

Referenced by:

PiSwPdoPnPDispatch
PiSwPnPInfoInit