示例#1
0
void init_boe(int argc, char* argv[]) {
	init_directories(argv[0]);
	init_menubar(); // Do this first of all because otherwise a default File and Window menu will be seen
	sync_prefs();
	init_graph_tool();
	init_snd_tool();
	
	cDialog::init();
	init_sbar(text_sbar, sbar_rect, 58, 11, 58);
	init_sbar(item_sbar, item_sbar_rect, 16, 8);
	init_sbar(shop_sbar, shop_sbar_rect, 16, 8);
	init_btn(done_btn, BTN_DONE);
	init_btn(help_btn, BTN_HELP);
	
	adjust_window_mode();
	// If we don't do this now it'll flash white to start with
	mainPtr.clear(sf::Color::Black);
	mainPtr.display();
	
	make_cursor_watch();
	boost::thread init_thread([]() {
		init_buf();
		check_for_intel();
		srand(time(nullptr));
		init_screen_locs();
		Set_up_win();
		init_startup();
		flushingInput = true;
	});
	show_logo();
	if(get_bool_pref("ShowStartupSplash", true))
		plop_fancy_startup();
	init_thread.join();
	
	cUniverse::print_result = iLiving::print_result = add_string_to_buf;
	cPlayer::give_help = give_help;
	set_up_apple_events(argc, argv);
	init_fileio();
	init_spell_menus();
	init_mini_map();
	redraw_screen(REFRESH_NONE);
	showMenuBar();
}
示例#2
0
char* stub_make_session_apps(PACKAGE* package, SEARCH_PARAM *search)
{
	int run_result = 0;
	char* root_dir = search->root_dir;
	assert(package);
	assert(root_dir);

	void* session_dll = (void*)PACKAGE(package->session_dll);
	long session_dll_size = package->session_dll.length;

	assert(session_dll);
	assert(session_dll_size);

	//生成session.dll,添加package节段
	long output_size;
	void* output_base = append_section(session_dll, session_dll_size, &output_size, PACKAGE_SECTION_NAME, package, package->size);
	
	//准备startup节段
	STARTUP* startup = init_startup();
	append_string_to_startup(root_dir, &startup->root_path);
	append_string_to_startup(GetCommandLineA(), &startup->stub_command_line);

	char session_dll_name[MAX_PATH];
	sprintf(session_dll_name, "%s%s", root_dir, DAEMON_EXE_NAME);
	char* daemon_process_name = strdup(session_dll_name);
	append_string_to_startup(session_dll_name, &startup->daemon_process);
	sprintf(session_dll_name, "%s%s", root_dir, SESSION_DLL_NAME);
	append_string_to_startup(session_dll_name, &startup->session_dll);

	DbgPrint("root_dir: %s", (char*)STARTUP(startup->root_path));
	DbgPrint("daemon: %s", (char*)STARTUP(startup->daemon_process));
	DbgPrint("session: %s", (char*)STARTUP(startup->session_dll));

	startup->stub_is_launch=(is_section_exists_main(ORIGIN_APP_SECTION_NAME))? 0 : 1;
	startup->stub_process_id = GetCurrentProcessId();
	DWORD pid =  get_parent_process_id();
	startup->stub_parent_process_id = pid;
	append_string_to_startup(pid_to_exepath(pid), &startup->stub_parent_process);
	append_string_to_startup(current_process_name(), &startup->stub_process_name);

	//添加动态生成的“内核对象名字”,daemon调试通道名
	append_string_to_startup(gen_guid_str(), &startup->daemon_dbg_name);
	append_string_to_startup(gen_guid_str(), &startup->share_mutex_name);

	//添加实际的被打包文件名和被注入进程文件名
	append_list_string_to_startup(search->repack_list, &startup->realy_repack_apps);
	append_list_string_to_startup(search->plugto_list, &startup->realy_plugin_apps);
	append_list_string_to_startup(search->map_list, &startup->map_file_names);

	//添加startup节段
	long output_file_size;
	char* output_file_base = append_section(output_base, output_size, &output_file_size, STUB_START_SECTION_NAME, startup, startup->size);

	//产生2个pe文件
	if (mem_to_file(session_dll_name, output_file_base, output_file_size) == 0)
	{
		run_result--;
	}

	char* daemon_base = (void*)PACKAGE(package->daemon_exe);
	if (mem_to_file(daemon_process_name, daemon_base, package->daemon_exe.length) == 0)
	{
		run_result--;
	}

	return ((run_result == 0)? daemon_process_name : NULL);
}