OVH Cloud OVH Cloud

LoadLibraryEx et GetModuleFilename

4 réponses
Avatar
jl
Salut,

J'ai une appli dans laquelle un code que je ne contrôle pas fait un
LoadLibraryEx d'une dll pour ses ressources et donc, utilise le paramètre
LOAD_LIBRARY_AS_DATAFILE.

J'aurais besoin de connaître le nom du fichier chargé. Il semble que sur le
handle retourné, la fonction GetModuleFileName ne fonctionne pas (elle
retourne 0 et GetLastError ne retourne pas d'erreur).

Quelqu'un a une idée pour arriver au résultat (obtenir le nom du fichier) ?

Merci

Jean

4 réponses

Avatar
François Müller
Bonjour

"jl" wrote in message news:3f423af7$0$26379
| J'ai une appli dans laquelle un code que je ne contrôle pas fait un
| LoadLibraryEx d'une dll pour ses ressources et donc, utilise le paramètre
| LOAD_LIBRARY_AS_DATAFILE.
|
| J'aurais besoin de connaître le nom du fichier chargé. Il semble que sur
le
| handle retourné, la fonction GetModuleFileName ne fonctionne pas (elle
| retourne 0 et GetLastError ne retourne pas d'erreur).

La fonction GetModuleFileName fonctionne très bien, mais comment obtiens tu
le handle que tu lui passe ?


| Quelqu'un a une idée pour arriver au résultat (obtenir le nom du fichier)
?

Enumérer les modules du process et utiliser GetModuleFileName sur chaque

F.
Avatar
jl
Salut,

"François Müller" a écrit dans le message
de news:bhtefh$309mi$
Bonjour

"jl" wrote in message news:3f423af7$0$26379
| J'ai une appli dans laquelle un code que je ne contrôle pas fait un
| LoadLibraryEx d'une dll pour ses ressources et donc, utilise le


paramètre
| LOAD_LIBRARY_AS_DATAFILE.
|
| J'aurais besoin de connaître le nom du fichier chargé. Il semble que sur
le
| handle retourné, la fonction GetModuleFileName ne fonctionne pas (elle
| retourne 0 et GetLastError ne retourne pas d'erreur).

La fonction GetModuleFileName fonctionne très bien, mais comment obtiens


tu
le handle que tu lui passe ?



C'est un handle obtenu par LoadLibraryEx(fn, 0, LOAD_LIBRARY_AS_DATAFILE)
dans une partie de code que je ne connais pas. Ce handle est valide (des
ressources sont chargées) mais GetModuleFileName retourne 0 (je teste sous
XP) sans pour autant que GetLastError ne retourne quelque erreur que ce soit
(FormatMessage donne Operation réussie).

Je viens de faire un test plus léger que mon appli complète et
effectivement, avec un handle d'une dll chargée par LoadLibraryEx et
LOAD_LIBRARY_AS_DATAFILE, la fonction GetModuleFileName retourne 0.

| Quelqu'un a une idée pour arriver au résultat (obtenir le nom du


fichier)
?

Enumérer les modules du process et utiliser GetModuleFileName sur chaque



Comment énumérer les modules (facilement, sans passer par ToolHelp32 qui
n'existe pas sous NT) ?

Merci.

Jean
Avatar
François Müller
"jl" wrote in message news:3f4242a0$0$26400

|
| Je viens de faire un test plus léger que mon appli complète et
| effectivement, avec un handle d'une dll chargée par LoadLibraryEx et
| LOAD_LIBRARY_AS_DATAFILE, la fonction GetModuleFileName retourne 0.

J'avoue que j'avais bypassé le LOAD_LIBRARY_AS_DATAFILE. Dans ce cas, le
GetModuleFileName ne peut pas te retourner quoique ce soit, puisque le
module est vu comme une resource dans l'espace de donnée de l'entité
exécutable et pas comme un module exécutable.

| Comment énumérer les modules (facilement, sans passer par ToolHelp32 qui
| n'existe pas sous NT) ?

EnumProcessModules, mais, même motif, même punition : avec
LOAD_LIBRARY_AS_DATAFILE cela ne marchera sans doute pas (pas essayé)

Accessoirement, pourquoi se chargement de module en tant qu'entité non
exécutable ?

Sinon, essaie (sans garantie) avec EnumResourceName et EnumResourceType

A+

François
Avatar
François Müller
Coquilles :

"François Müller" wrote in message

| resource dans l'espace de donnée de l'entité

-> reSsource
-> espace de donnéeS

| Accessoirement, pourquoi se chargement
-> Ce chargement

Pardon.

F.