2 fichiers en 1 (EXE + SYS= EXE)

Résolu
Signaler
Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007
-
Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007
-
Salut a tous,

Merci a tous, pour tous ces codes qui me sont personnellement, en tant qu autodidacte, d une precieuse aide.
La j ai un probleme que je n arrive pas a resoudre:

   J ai un executable dont la fonction est de charger un driver .sys, pour des raisons de portabilite j aimerais faire un seul fichier contenant les 2 (.exe + .sys), ce fichier serait un executable qui charge le driver, dans mes recherches j ai trouve une piste : le format PE. mais j ai du mal a trouver un tuto ou des explications claires sur la procedure a suivre pour associer les fichiers.

si vous avez des pistes ou la solution, quelque chose qui pourrait faire avancer mon projet, je vous en serais tres reconnaissant.

Merci

17 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Petzold chapitre10 explique comment créer sa custom resource:
http://brunews.free.fr/brunews/download/CP5.zip
http://brunews.free.fr/brunews/download/CP5Sources.zip

même principe dans mon exemple, juste nom de la resource binaire qui change.

ciao...
BruNews, MVP VC++
Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008

mettre le fichier .sys en ressource de ton .exe et l'extraire ?
Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007

Merci pour ton aide
comment le mettre en ressource, j utilise visual C .net, ResEditor ??
j ai le code pour l extraire mais pas la procedure pour le mettre en ressource
Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008

tu utilises quoi comme IDE ? Visual Studio ?
Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008

Visual C .net <-- ok, j'avais pas vu
Il doit y avoir un editeur de ressource dans ton Visual studio. Donc il faut ajouter le fichier comme data je pense.
Surement qu'avec ton code d'extraction de ressource il y a un exemple avec un fichier en ressource.

pt'etre que quelqu'un d'autre peut aider un peu plus là dessus ...

++
Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007

oui visual studio .Net 2003
Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008

Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007

j ai essaye ta methode en ajoutant dans les ressources du projet et ca a l air de marcher, je te remercie pour ton aide, j ai perdu pas mal de temps en recherche alors que ct assez simple.
la, je vais voir comment recuperer le fichier de ressource .sys et le copier sur le disque dur ailleurs, une suggestion de ta part peut etre ?? je te tiens au courant.

Merci 24Karas
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Tout ce dont tu as besoin ici (extraction et copie dans fichier):
DLL HOOK EN RESSOURCE BINAIRE DU PROG (WIN32)
http://www.cppfrance.com/code.aspx?id=25450

ciao...
BruNews, MVP VC++
Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008

de rien tucco, le forum ça sert à ça ;-)
Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007

je me suis rejoui trop vite, j ai integre le fichier .sys dans le projet dans le repertoire ressource via l explorateur de solution, et apres compilation il s avere que le driver ne s integre pas a l executable dont la taille ne change pas et l executable m indique qu il ne trouve pas la ressource, j ai regarde sur le post indique, le projet testeur ressemble a ce que je veux faire, mais j  aurais besoin de connaitre la procedure exact car je ne vois pas comment arriver a ce resultat, voici le code que j utilise pour extraire le fichier .sys:

int

_util_decompress_sysfichier(
char *theResourceName){

HRSRC aResourceH;

HGLOBAL aResourceHGlobal;

unsigned
char* aFilePtr;

unsigned
long aFileSize;HANDLE file_handle;

// Localise une ressource nommee dans le fichier .EXE courant

aResourceH= FindResource(NULL, theResourceName, "BINARY");

if(!aResourceH){

return 10;// mon programme me retourne 10 => il ne trouve pas la ressource driver.sys}

aResourceHGlobal= LoadResource(NULL, aResourceH);

if(!aResourceHGlobal){

return 2;}

aFileSize= SizeofResource(NULL, aResourceH);

aFilePtr= (

unsigned
char *)LockResource(aResourceHGlobal);

if(!aFilePtr){

return 3;}

char _filename[64];_snprintf(_filename, 62, "%s.sys", theResourceName);

file_handle= CreateFile(_filename,

                                          FILE_ALL_ACCESS,

                                           0,

                                          NULL,

                                          CREATE_ALWAYS,

                                          0,

                                          NULL);

if(INVALID_HANDLE_VALUE== file_handle){

int err = GetLastError();

if((ERROR_ALREADY_EXISTS== err) || (32== err)){

// le fichier existe et peut etre verrouiller en raison de l executable

return 4;}

printf("%s erreur decompression %d\n", _filename, err);

return
false;}

// Boucle while pour ecrire la ressource sur le disque

while(aFileSize--){

unsigned
long numWritten;WriteFile(file_handle, aFilePtr, 1, &numWritten, NULL);

aFilePtr++;

}

CloseHandle(file_handle);

return 5;}

voila je rappelle le probleme que je cherche a resoudre: j ai 2 fichiers un exectuable qui charge un driver driver.sys qui marchent tres bien separemment, ce que je veux  c de faire un seul fichier executable avec les 2 (exe + sys) pour des raisons de portabilite
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
"J ai un executable dont la fonction est de charger un driver
.sys, pour des raisons de portabilite j aimerais faire un seul fichier
contenant les 2 (.exe + .sys)"

J'aimerais que tu m'explique en quoi cela va amélioré la portabilité de ton app?
Bob...
"La chance accorde ses faveur aux esprits avertis..."
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
tucco > c'est quoi cette boucle pour écrire octet par octet ??? voila bien un truc qu'on ne fait jamais à moins de vouloir ralentir.
Je t'ai passé un lien, il faut faire exact comme c'est dans l'exemple.
Tu connais la taille du driver quand tu l'insères en ressource de l'exe alors code la valeur de buffer en dur et aspire le dedans en 1 seule passe, idem pour WriteFile en 1 seule fois.

ciao...
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
ah oui autrre truc:
"portabilité" en prog veut dire que le code peut être recompilé tel quel pour un autre système, Windows Linux par exemple.

On parlera plutôt de facilité de livraison dans ton cas, un driver est spécifique à un système donc exclut toute portabilité.

ciao...
BruNews, MVP VC++
Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007

oui "portabilite" est mal choisi, mais tu m as compris ce que je veux explicetement c ne plus avoir a deplacer 2 fichiers ou plus mais un seul qui contienne le ou les autres, le code que j utilise n est pas de moi je l ai trouve dans le livre de hoglund, je l ai mis pour ce faire une idee de ce que je cherche a faire et de la peut etre avoir la chance qu une personne m explique comme si j etais un newbie comment integrer mondriver.sys dans mon projet dans visual studio, j ai vu le post BruceNews et j ai telecharge le projet, mais je n arrive pas a savoir pour l instant comment IDR_BINDLL est cree dans le projet, le post n indique pas etape par etape l integration de sa dll, mais je vais a nouveau y jeter un coup d oeil peut etre que je suis passe a cote sans remarquer que la solution est sous mes yeux.

J ai ajoute le fichier mydriver.sys dans le repertoire resources dans l explorateur de solution, naivement j ai cru que ca suffisait mais sans creer d erreur de compilation la procedure ne donne rien, apres avoir vu le projet TESTEUR avec Jcd.dll, dans l explortateur de ressource je vois la ressource IDR_BINDLL, dans mon projet le ressource view est vide, alors comment m y prendre pour faire ?
Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007

Merci pour la reactivite, je consulte les liens et je reviens .

Merci encore.
Messages postés
12
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
3 août 2007

merci beaucoup BruceNews, c etait exactement ce qu il me fallait tu as tape dans le mille, j ai teste et ca marche du 1er coup, voila le probleme resolu grace a brucenews, pour ceux qui cherche a faire la meme chose, embarque des fichiers dans l executable( dans mon cas un executable lancant un driver .EXE contenant un .SYS) consulter les 2 liens donnes par BruceNews (CP5 chapitre 10), assez simple a realiser, la doc est en anglais basique, je peux mettre la traduction mais je pense que ca ne sera pas necessaire. enfin si qq un la veux qd meme je decrirai etape par etape la procedure a suivre.

Merci a tous pour votre contribution.