Extraire un fichier de mon exe et le copier sur mon DD [Résolu]

Signaler
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009
-
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009
-
Bonjour,

Pourriez vous me dire ce qui cloche dans ce bout de code.
le but est d'extraire une DLL qui est dans mon exe et de la copier sur mon disque dure.
Merci.

void IEesp()
{
HRSRC FindR;
HGLOBAL LoadR;
BYTE * LockR;
FILE * f;

FindR = FindResource(hinst,"Testingdll",RT_RCDATA);
LoadR = LoadResource(hinst,FindR);
if(LoadR)
{
LockR = (BYTE*) LockResource(hgbl);
}
HANDLE hFile = CreateFile("C:\\Testing.dll",GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dWrited;
WriteFile(hFile, LockR, sizeof(LockR), &dWrited, 0);
CloseHandle(hFile);
FreeResource(LoadR);
}

GuitouLeFoux
"Le secret du sage est de briller dans l'ombre"

10 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Verifie le handle retourné par FindResource(), si handle retourné == 0 alors erreur.

+2(p - n)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Exemple ici:
DLL HOOK EN RESSOURCE BINAIRE DU PROG (WIN32)
http://www.cppfrance.com/code.aspx?id=25450

ciao...
BruNews, MVP VC++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
sizeof(LockR) te renverra 4 (car pointeur) donc tu ne copieras que 4 octets dans ton fichier. Rentre la taille en dur si tu la connais.

+2(p - n)
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

Merci de cette réponse rapide.

J'ai essayé de mettre la taille en dure mais cela ne marche pas je récupére un fichier de 0 octet.
De plus, est-il possible de récupérer la taille du fichier pour eviter de marquer la taille en dure (la taille va surement changer)

Merci

PS: j'utilise DevCpp

GuitouLeFoux
"Le secret du sage est de briller dans l'ombre"
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Il existe SizeofResource() mais si tu connais la taille il est vrai que sera + rapide de le mettre en dur.
FILE_SHARE_READ est aussi inutile si tu crées (CREATE_ALWAYS) et que tu fermes illico, 0 suffira en ce cas.

ciao...
BruNews, MVP VC++
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

Merci pour tes infos BruNews.
J'ai modifier un peut le code mais je crée encore un fichier de 0 octet.


J'ai regardé dans msdn comment utilisé SizeofResource et je ne pense pas mettre trompé.
Je pense que ca doit merder au niveau de LoadResource.

void IEesp()
{
HRSRC FindR;
HGLOBAL LoadR;
BYTE * LockR;
FILE * f;
DWORD SoR;

FindR = FindResource(hinst,"cftmondll",RT_RCDATA);
SoR = SizeofResource(hinst,FindR);
LoadR = LoadResource(hinst,FindR);
if(LoadR)
{
LockR = (BYTE*) LockResource(hgbl);
}
HANDLE hFile = CreateFile("C:\\Testing.dll",GENERIC_WRITE,0,0,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,0);
DWORD dWrited;
WriteFile(hFile, LockR,SoR, &dWrited, 0);
CloseHandle(hFile);
FreeResource(LoadR);
}

GuitouLeFoux
"Le secret du sage est de briller dans l'ombre"
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

Bon voila j'ai bien suivi vos indication, et j'ai corrigé mon code.
Il y a un avancement car maintenant j'arrive bien a récupérer un fichier mais plus petit que celui de départ
74 bytes au lieu de 193,054 bytes.

D'apres vous cela pourrait venir d'ou?

Dans mon RC
testdll RCDATA {"C:/Documents and Settings/glillette/Desktop/KDo[W32]/KDo[W32]/K/test.dll"}

Dans mon EXE
void IEesp()
{
HRSRC FindR;
HGLOBAL LoadR;
BYTE * LockR;
FILE * f;
DWORD SoR;


FindR = FindResource(hinst,"testdll",RT_RCDATA);
SoR = SizeofResource(hinst,FindR);
LoadR = LoadResource(hinst,FindR);
if(LoadR)
{
LockR = (BYTE*) LockResource(LoadR);
}
HANDLE hFile = CreateFile("C:\\test.dll",GENERIC_WRITE,0,0,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,0);
DWORD dWrited;
WriteFile(hFile, LockR,SoR,&dWrited, 0);
CloseHandle(hFile);
FreeResource(LoadR);
}

GuitouLeFoux
"Le secret du sage est de briller dans l'ombre"
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

Au fait pour info je viens d'éditer en txt le fichier que je recrée et devinez quoi ?

il y a marqué C:/Documents and Settings/glillette/Desktop/KDo[W32]/KDo[W32]/K/test.dll, c'est a dire le chemin qu'il y a dans mon fichier rc.

La je suis perdu.

GuitouLeFoux
"Le secret du sage est de briller dans l'ombre"
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
RC de mon exemple contient:
IDR_BINDLL BINDLL "Jcd.dll"

faut juste imiter.

ciao...
BruNews, MVP VC++
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

Merci a vous deux pour votre aide.Ca marche !!!!

GuitouLeFoux
"Le secret du sage est de briller dans l'ombre"