// message to create a Standard Archive from a stream
DWORD CArchiveFactory::OnCreateArchive(DWORD size, void *param)
{
	CArchive *newArchive;
	CREATEARCHIVE *ca;
	CREATESTREAM cs;
	StdString csMessage;
	DWORD retVal;
	VERIFY_MESSAGE_SIZE(size, sizeof(CREATEARCHIVE));
	ca = (CREATEARCHIVE *)param;

	cs.streamData = ca->streamData;
	cs.streamSize = ca->streamSize;
	cs.mode = ca->mode;
	csMessage = _T("CreateStream_");
	csMessage += ca->streamType->GetString();
	// try and create the stream
	DWORD msgHash_csMessage = CHashString(csMessage).GetUniqueID();
	retVal = m_ToolBox->SendMessage(msgHash_csMessage, sizeof(CREATESTREAM), &cs);
	if (retVal != MSG_HANDLED)
	{
		return retVal;
	}

	try
	{
		newArchive = new CArchive();
	}
	catch(...)
	{
		delete cs.openStream;
		return MSG_ERROR;
	}

	// initialize it with the stream
	newArchive->Init(cs.openStream);

	// check if we are creating a read and write stream
	if( (cs.mode & (STREAM_MODE_READ | STREAM_MODE_WRITE)) == (STREAM_MODE_READ | STREAM_MODE_WRITE))
	{
		// set to a write archive only if the ARCHIVE_MODE_WRITE flag is set
		if((cs.mode & ARCHIVE_MODE_WRITE)==ARCHIVE_MODE_WRITE )
		{
			newArchive->SetIsWriting( true );
		}
	}

	ca->archive = newArchive;

	return MSG_HANDLED_STOP;
}