Ejemplo n.º 1
0
//-----------------------------------------------------------------------------
void save_event(RDP_EVENT* event, RAIL_EVENT* rail_event)
{
	rail_event->event_type = event->event_type;

	switch (event->event_type)
	{
		case RDP_EVENT_TYPE_RAIL_CHANNEL_GET_SYSPARAMS:
			printf("UI receive Get Sysparams Event\n");
			break;

		case RDP_EVENT_TYPE_RAIL_CHANNEL_EXEC_RESULTS:
			{
				RAIL_EXEC_RESULT_ORDER* exec_result = (RAIL_EXEC_RESULT_ORDER*)event->user_data;
				printf("UI receive Exec Results Event\n");
				memcpy(&rail_event->order_info.exec_result, event->user_data,
					sizeof(RAIL_EXEC_RESULT_ORDER));

				rail_unicode_string_alloc(&rail_event->order_info.exec_result.exeOrFile,
						exec_result->exeOrFile.length);

				memcpy(rail_event->order_info.exec_result.exeOrFile.string,
					exec_result->exeOrFile.string,
					exec_result->exeOrFile.length);
			}
			break;

		case RDP_EVENT_TYPE_RAIL_CHANNEL_SERVER_SYSPARAM:
			printf("UI receive Server Sysparam Event\n");
			memcpy(&rail_event->order_info.sysparam, event->user_data,
				sizeof(RAIL_SYSPARAM_ORDER));
			break;

		case RDP_EVENT_TYPE_RAIL_CHANNEL_SERVER_MINMAXINFO:
			printf("UI receive Server Minmax Info Event\n");
			memcpy(&rail_event->order_info.minmaxinfo, event->user_data,
				sizeof(RAIL_MINMAXINFO_ORDER));
			break;

		case RDP_EVENT_TYPE_RAIL_CHANNEL_SERVER_LOCALMOVESIZE:
			printf("UI receive Server Local Movesize Event\n");
			memcpy(&rail_event->order_info.localmovesize, event->user_data,
				sizeof(RAIL_LOCALMOVESIZE_ORDER));
			break;

		case RDP_EVENT_TYPE_RAIL_CHANNEL_APPID_RESP:
			printf("UI receive AppId Response Event\n");
			memcpy(&rail_event->order_info.get_appid_resp, event->user_data,
				sizeof(RAIL_GET_APPID_RESP_ORDER));

			rail_event->order_info.get_appid_resp.applicationId.string =
				&rail_event->order_info.get_appid_resp.applicationIdBuffer[0];
			break;

		case RDP_EVENT_TYPE_RAIL_CHANNEL_LANGBARINFO:
			printf("UI receive Language Info Event\n");
			memcpy(&rail_event->order_info.langbar_info, event->user_data,
				sizeof(RAIL_LANGBAR_INFO_ORDER));
			break;
	}
}
Ejemplo n.º 2
0
void* rail_clone_order(UINT32 event_type, void* order)
{
	struct
	{
		UINT32 type;
		UINT32 size;
	} ordersize_table[] =
	{
		{RDP_EVENT_TYPE_RAIL_CHANNEL_GET_SYSPARAMS, sizeof(RAIL_SYSPARAM_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CHANNEL_EXEC_RESULTS, sizeof(RAIL_EXEC_RESULT_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CHANNEL_SERVER_SYSPARAM, sizeof(RAIL_SYSPARAM_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CHANNEL_SERVER_MINMAXINFO, sizeof(RAIL_MINMAXINFO_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CHANNEL_SERVER_LOCALMOVESIZE, sizeof(RAIL_LOCALMOVESIZE_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CHANNEL_APPID_RESP, sizeof(RAIL_GET_APPID_RESP_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CHANNEL_LANGBARINFO, sizeof(RAIL_LANGBAR_INFO_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_SET_SYSPARAMS, sizeof(RAIL_SYSPARAM_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_EXEC_REMOTE_APP, sizeof(RDP_PLUGIN_DATA)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_ACTIVATE, sizeof(RAIL_ACTIVATE_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_SYSMENU, sizeof(RAIL_SYSMENU_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_SYSCOMMAND, sizeof(RAIL_SYSCOMMAND_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_NOTIFY_EVENT, sizeof(RAIL_NOTIFY_EVENT_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_WINDOW_MOVE, sizeof(RAIL_WINDOW_MOVE_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_APPID_REQ, sizeof(RAIL_GET_APPID_REQ_ORDER)},
		{RDP_EVENT_TYPE_RAIL_CLIENT_LANGBARINFO, sizeof(RAIL_LANGBAR_INFO_ORDER)},
	};
	size_t i = 0;
	size_t order_size = 0;
	void*  new_order = NULL;

	for (i = 0; i < ARRAYSIZE(ordersize_table); i++)
	{
		if (event_type == ordersize_table[i].type)
		{
			order_size = ordersize_table[i].size;
			break;
		}
	}

	// Event type not found.
	if (order_size == 0) return NULL;

	new_order = malloc(order_size);
	memcpy(new_order, order, order_size);

	//printf("rail_clone_order: type=%d order=%p\n", event_type, new_order);

	// Create copy of variable data for some orders
	if ((event_type == RDP_EVENT_TYPE_RAIL_CHANNEL_GET_SYSPARAMS) ||
		(event_type == RDP_EVENT_TYPE_RAIL_CLIENT_SET_SYSPARAMS))
	{
		RAIL_SYSPARAM_ORDER* new_sysparam = (RAIL_SYSPARAM_ORDER*)new_order;
		RAIL_SYSPARAM_ORDER* old_sysparam = (RAIL_SYSPARAM_ORDER*)order;

		rail_unicode_string_alloc(&new_sysparam->highContrast.colorScheme,
			old_sysparam->highContrast.colorScheme.length);

		memcpy(new_sysparam->highContrast.colorScheme.string,
			old_sysparam->highContrast.colorScheme.string,
			old_sysparam->highContrast.colorScheme.length);
	}

	if (event_type == RDP_EVENT_TYPE_RAIL_CHANNEL_EXEC_RESULTS)
	{
		RAIL_EXEC_RESULT_ORDER* new_exec_result = (RAIL_EXEC_RESULT_ORDER*)new_order;
		RAIL_EXEC_RESULT_ORDER* old_exec_result = (RAIL_EXEC_RESULT_ORDER*)order;

		rail_unicode_string_alloc(&new_exec_result->exeOrFile,
				old_exec_result->exeOrFile.length);

		memcpy(new_exec_result->exeOrFile.string,
			old_exec_result->exeOrFile.string,
			old_exec_result->exeOrFile.length);
	}

	if (event_type == RDP_EVENT_TYPE_RAIL_CHANNEL_APPID_RESP)
	{
		RAIL_GET_APPID_RESP_ORDER* new_app_resp = (RAIL_GET_APPID_RESP_ORDER*)new_order;

		new_app_resp->applicationId.string = &new_app_resp->applicationIdBuffer[0];
	}

	return new_order;
}
Ejemplo n.º 3
0
void* rail_clone_order(UINT32 event_type, void* order)
{
	struct
	{
		UINT32 type;
		UINT32 size;
	} ordersize_table[] =
	{
		{RailChannel_GetSystemParam, sizeof(RAIL_SYSPARAM_ORDER)},
		{RailChannel_ServerExecuteResult, sizeof(RAIL_EXEC_RESULT_ORDER)},
		{RailChannel_ServerSystemParam, sizeof(RAIL_SYSPARAM_ORDER)},
		{RailChannel_ServerMinMaxInfo, sizeof(RAIL_MINMAXINFO_ORDER)},
		{RailChannel_ServerLocalMoveSize, sizeof(RAIL_LOCALMOVESIZE_ORDER)},
		{RailChannel_ServerGetAppIdResponse, sizeof(RAIL_GET_APPID_RESP_ORDER)},
		{RailChannel_ServerLanguageBarInfo, sizeof(RAIL_LANGBAR_INFO_ORDER)},
		{RailChannel_ClientSystemParam, sizeof(RAIL_SYSPARAM_ORDER)},
		{RailChannel_ClientExecute, sizeof(RDP_PLUGIN_DATA)},
		{RailChannel_ClientActivate, sizeof(RAIL_ACTIVATE_ORDER)},
		{RailChannel_ClientSystemMenu, sizeof(RAIL_SYSMENU_ORDER)},
		{RailChannel_ClientSystemCommand, sizeof(RAIL_SYSCOMMAND_ORDER)},
		{RailChannel_ClientNotifyEvent, sizeof(RAIL_NOTIFY_EVENT_ORDER)},
		{RailChannel_ClientWindowMove, sizeof(RAIL_WINDOW_MOVE_ORDER)},
		{RailChannel_ClientGetAppIdRequest, sizeof(RAIL_GET_APPID_REQ_ORDER)},
		{RailChannel_ClientLanguageBarInfo, sizeof(RAIL_LANGBAR_INFO_ORDER)},
	};
	size_t i = 0;
	size_t order_size = 0;
	void*  new_order = NULL;

	for (i = 0; i < ARRAYSIZE(ordersize_table); i++)
	{
		if (event_type == ordersize_table[i].type)
		{
			order_size = ordersize_table[i].size;
			break;
		}
	}

	// Event type not found.
	if (order_size == 0)
		return NULL;

	new_order = malloc(order_size);
	CopyMemory(new_order, order, order_size);

	//fprintf(stderr, "rail_clone_order: type=%d order=%p\n", event_type, new_order);

	// Create copy of variable data for some orders
	if ((event_type == RailChannel_GetSystemParam) ||
		(event_type == RailChannel_ClientSystemParam))
	{
		RAIL_SYSPARAM_ORDER* new_sysparam = (RAIL_SYSPARAM_ORDER*) new_order;
		RAIL_SYSPARAM_ORDER* old_sysparam = (RAIL_SYSPARAM_ORDER*) order;

		rail_unicode_string_alloc(&new_sysparam->highContrast.colorScheme,
			old_sysparam->highContrast.colorScheme.length);

		CopyMemory(new_sysparam->highContrast.colorScheme.string,
			old_sysparam->highContrast.colorScheme.string,
			old_sysparam->highContrast.colorScheme.length);
	}

	if (event_type == RailChannel_ServerExecuteResult)
	{
		RAIL_EXEC_RESULT_ORDER* new_exec_result = (RAIL_EXEC_RESULT_ORDER*) new_order;
		RAIL_EXEC_RESULT_ORDER* old_exec_result = (RAIL_EXEC_RESULT_ORDER*) order;

		rail_unicode_string_alloc(&new_exec_result->exeOrFile,
				old_exec_result->exeOrFile.length);

		CopyMemory(new_exec_result->exeOrFile.string,
			old_exec_result->exeOrFile.string,
			old_exec_result->exeOrFile.length);
	}

	if (event_type == RailChannel_ServerGetAppIdResponse)
	{
		RAIL_GET_APPID_RESP_ORDER* new_app_resp = (RAIL_GET_APPID_RESP_ORDER*)new_order;

		new_app_resp->applicationId.string = &new_app_resp->applicationIdBuffer[0];
	}

	return new_order;
}