Extraire un fichier de mon exe et le copier sur mon DD

Résolu
guitoulefoux
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009
- 26 août 2005 à 09:11
guitoulefoux
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009
- 29 août 2005 à 10:43
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

cs_AlexMAN
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
26 août 2005 à 10:00
Verifie le handle retourné par FindResource(), si handle retourné == 0 alors erreur.

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

ciao...
BruNews, MVP VC++
3
cs_AlexMAN
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
26 août 2005 à 09:20
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)
0
guitoulefoux
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

26 août 2005 à 09:29
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"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
26 août 2005 à 09:32
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++
0
guitoulefoux
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

26 août 2005 à 09:51
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"
0
guitoulefoux
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

26 août 2005 à 11:39
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"
0
guitoulefoux
Messages postés
152
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
6 janvier 2009

26 août 2005 à 11:49
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"
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
26 août 2005 à 12:06
RC de mon exemple contient:
IDR_BINDLL BINDLL "Jcd.dll"

faut juste imiter.

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

29 août 2005 à 10:43
Merci a vous deux pour votre aide.Ca marche !!!!

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