Pagina 1 di 1

C++ scappare dalla gm sandbox

Inviato: 24/04/2017, 18:39
da Barnack
Salve a tutti. Volevo fuggire dalle limitazioni autoimposte di gm. L'idea era di usare le mie piccole conoscenze di c++ per fare due funzioni (get-set) che mi facciano copiare dei files dentro e guori la cartella appdata\local\<gioco>.

Tutto bello se non fosse che CON STRINGHE UNICODE E TIPI STRANI NON CI STO CAPENDO UN PORCOSPINO!

Doveva essere una cosa da 10 righe e 10 minuti, è diventato uno spreco di 50 righe e 5 ore -.-

Vi posto lo schifo di codice cui sono giunto (che non va per inciso)
Da errore in esecuzione su gm. Potrei benissimo aver sbagliato con le funzioni wcsncat_s e nell'utilizzo del tipo TCHAR, non le conoscevo fino ad oggi (non mi lasciava usare wcsncat, non so che differenza ci sia).
Spoiler

Codice: Seleziona tutto

#include "stdafx.h"
#include <iostream>
#include <WinBase.h>
#include <windows.h>
#include <Pathcch.h>
#include <Shlobj.h>
#define GMEXPORT extern "C" __declspec (dllexport)

GMEXPORT double get_file(char * path, char * filename)
	{
	//input to unicode
	wchar_t infilename[MAX_PATH];
	wchar_t inpath[MAX_PATH];
	MultiByteToWideChar(CP_ACP, 0, path, strlen(path), inpath, strlen(path));
	MultiByteToWideChar(CP_ACP, 0, filename, strlen(filename), infilename, strlen(filename));
	//get environmental variables
	TCHAR appdata[MAX_PATH];
	TCHAR userprofile[MAX_PATH];
	SHGetSpecialFolderPath(NULL, appdata, CSIDL_APPDATA, FALSE);
	SHGetSpecialFolderPath(NULL, userprofile, CSIDL_PROFILE, FALSE);
	//get game folder and chain file path
	wcsncat_s(appdata, L"\\SideBar_Settings\\", MAX_PATH);
	std::cout << "GAMEPATH: " << appdata << std::endl;
	wcsncat_s(userprofile, inpath, MAX_PATH);
	wcsncat_s(userprofile, L"\\", MAX_PATH);
	std::cout << "FILEPATH: " << userprofile << std::endl;
	//get full game+file and path+file
	wcsncat_s(appdata, infilename, MAX_PATH);
	std::cout << "FROM: " << appdata << std::endl;
	wcsncat_s(userprofile, infilename, MAX_PATH);
	std::cout << "TO: " << userprofile << std::endl;
	//finally copy
	if (CopyFile(appdata, userprofile, 0))
		{
		return(1.0);
		}
	else
		{
		std::cout << "C++Lib ERROR: " << GetLastError() << std::endl;
		return(0.0);
		}
	}
Gradirei qualsiasi forma di correzione o pappapronta commentata, perché sto davvero impazzendo.

Il codice dovrebbe:
funzione get:
1) prendere il nome di un file (var_file), prendere un percorso (var_percorso)
2) copiare %userprofile%\var_percorso\var_file
in
%localappdata%\nomegioco\var_file

funzione set dovrebbe fare l'inverso.

Any help???

Re: C++ scappare dalla gm sandbox

Inviato: 24/04/2017, 19:09
da Barnack
Lo so che non libero la memoria etcc etcc, ma la priorità per ora è farlo funzionare...

Re: C++ scappare dalla gm sandbox

Inviato: 25/04/2017, 13:54
da Xxshark888xX
Guarda, io farei in un altro modo:

Ti crei un .exe piccolo piccolo con qualche riga di codice che non fa altro che prendere come parametri (trasmessi dal .exe di GM) il file da spostare e la path dove deve essere spostato.
Quindi, tramite il tuo .exe creato con GM salvi il file che devi salvare nei limiti del sandbox, poi avvii l'exe creato scritto in C++ e il programma non fara' altro che spostare il file salvato al di fuori dei limiti sandbox. E' abbastanza "macchinoso" pero' cosi' risolvi :asd:

(Spero di essere riuscito a spiegarmi, altrimenti lo creo io (in C# dato che non conosco bene il C++) e ti fai un'idea di come deve funzionare)

Re: C++ scappare dalla gm sandbox

Inviato: 25/04/2017, 17:26
da Barnack
Ti sei perso un piccolo dettaglio... Game maker studio ha deprecato la funzione che permette di avviare altri eseguibili xD
Se nessuno che sa qualcosa di c++ ha da proporre qualche correzione mi andrebbe benissimo anche una dll analoga in C# (magari col sorgente così do un occhio)

Re: C++ scappare dalla gm sandbox

Inviato: 25/04/2017, 21:02
da Xxshark888xX
Azz, questo proprio non lo sapevo :asd:

Comunque, se domani ho tempo, cerco di creare qualcosa!

Re: C++ scappare dalla gm sandbox

Inviato: 26/04/2017, 13:18
da Barnack
Mi faresti un grosso favore :)

Re: C++ scappare dalla gm sandbox

Inviato: 26/04/2017, 23:21
da cp94
Sei sicuro che le abbiano tolte?
Io avevo letto che erano semplicemente state rinominate, per esempio execute_shell è diventato shell_execute (o shell_open).
Poi c'erano altre funzioni, tra cui execute_program ed external_call, che non so se o come siano state cambiate/eliminate.

Re: C++ scappare dalla gm sandbox

Inviato: 27/04/2017, 17:50
da Barnack
Si ne sono sicuro.
Ho ricontrollato e... sicurezza fondata :\
Conto su shark che crea qualcosa :asd: Purtroppo i miei professori sono linuxiani incalliti quindi se anche volessero non saprebbero dirmi niente sulle funzioni di Windows (cioè neanche ascolterebbero la mia domanda)

Re: C++ scappare dalla gm sandbox

Inviato: 27/04/2017, 20:46
da Xxshark888xX
Barnack ha scritto:Si ne sono sicuro.
Ho ricontrollato e... sicurezza fondata :\
Conto su shark che crea qualcosa :asd: Purtroppo i miei professori sono linuxiani incalliti quindi se anche volessero non saprebbero dirmi niente sulle funzioni di Windows (cioè neanche ascolterebbero la mia domanda)
Hey scusa, ma questi giorni sono stato un poco occupato e sinceramente non ho provato a fare nulla.
Inoltre cercando un poco su internet leggo che GM non va proprio a braccetto con le .dll realizzate in C#, quindi ho cercato ancora e ho trovato questa .dll gia' pronta.
Non l'ho testata, quindi non so se funziona, prova e fammi sapere!

E qui un source code (in C++) di una .dll che dovrebbe fare proprio cio' che ti serve.

Re: C++ scappare dalla gm sandbox

Inviato: 05/06/2017, 10:12
da Barnack
C'è un piccolo problemino con la dll che hai linkato... Tipo che è del 2014 ed il file non è più reperibile xD

Re: C++ scappare dalla gm sandbox

Inviato: 07/06/2017, 17:03
da Xxshark888xX
Barnack ha scritto:C'è un piccolo problemino con la dll che hai linkato... Tipo che è del 2014 ed il file non è più reperibile xD
Il sourcecode pero' e' ancora valido, e l'ultimo update e' di 6 mesi fa, lo hai controllato?

Re: C++ scappare dalla gm sandbox

Inviato: 06/07/2017, 21:44
da Barnack
Il codice che hai mandato lo guarderò finiti gli esami che avrò, tempo, per ora se a qualcuno interessasse sto usando questo:
https://yal.cc/gamemaker-windows-functi ... er-studio/

Non so why ma prima non l'avevo mai trovato

Re: C++ scappare dalla gm sandbox

Inviato: 12/07/2017, 21:31
da Alv
Mi pare la libreria GMFileSystem faccia al caso tuo:
http://gmc.yoyogames.com/index.php?showtopic=567528