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 1
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 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
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 1
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 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
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 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
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
Rejoignez-nous