Me donne bien le nom complet de ma Dll, mais il faut deja que je connaisse le nom de la Dll
Cordialement,
JGP
J'ai bien trouvé une méthode, mais elle est un peu lourde, et nécessite PSAPI.DLL (donc NT, 2000, XP).
1. Écrire une fonction GetModuleFromProcAddress() qui fait :
1.1. Appeler EnumProcessModules() pour obtenir un tableau des handles des DLL du process
1.2. Pour chaque handle, appeler GetModuleInformation() pour connaître l'adresse de chargement et la taille occupée par chaque DLL, jusqu'à trouver celle qui contient une adresse de code donnée.
2. Écrire une fonction GetModuleSelf() qui appelle la précédente en lui donnant son adresse (de l'appelant, donc) comme paramètre. La mettre dans un ".h" si on veut l'utiliser un peu partout.
Voilà. Quand tu appelles GetModuleSelf(), tu botiens le handle la DLL où elle se trouve, et tu peux appeler GetModuleFileName() dessus.
// Enumérer toutes les DLL du processus // Obtient handles de tous les modules chargés par le process HANDLE hProcess = ::GetCurrentProcess(); HMODULE ahMods[1024] = {0}; DWORD nNeeded = 0;
-- ___________ 31/03/2005 15:07:38 _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Le jeudi 31 mars 2005 à 12:44, JGP_NoMail a écrit dans
fr.comp.os.ms-windows.programmation :
Bonjour,
Comment connaitre le nom du fichier dll ou le handle de la DLL ?
- GetModuleFileName( NULL, ModuleFileName,sizeof(ModuleFileName));
Me donne le nom du programme appelant
- GetModuleHandle( NULL);
Me donne le handle du programme appelant
Me donne bien le nom complet de ma Dll, mais il faut deja que je
connaisse le nom de la Dll
Cordialement,
JGP
J'ai bien trouvé une méthode, mais elle est un peu lourde, et nécessite
PSAPI.DLL (donc NT, 2000, XP).
1. Écrire une fonction GetModuleFromProcAddress() qui fait :
1.1. Appeler EnumProcessModules() pour obtenir un tableau des handles
des DLL du process
1.2. Pour chaque handle, appeler GetModuleInformation() pour connaître
l'adresse de chargement et la taille occupée par chaque DLL, jusqu'à
trouver celle qui contient une adresse de code donnée.
2. Écrire une fonction GetModuleSelf() qui appelle la précédente en lui
donnant son adresse (de l'appelant, donc) comme paramètre. La mettre
dans un ".h" si on veut l'utiliser un peu partout.
Voilà. Quand tu appelles GetModuleSelf(), tu botiens le handle la DLL où
elle se trouve, et tu peux appeler GetModuleFileName() dessus.
// Enumérer toutes les DLL du processus
// Obtient handles de tous les modules chargés par le process
HANDLE hProcess = ::GetCurrentProcess();
HMODULE ahMods[1024] = {0};
DWORD nNeeded = 0;
--
___________ 31/03/2005 15:07:38
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
Me donne bien le nom complet de ma Dll, mais il faut deja que je connaisse le nom de la Dll
Cordialement,
JGP
J'ai bien trouvé une méthode, mais elle est un peu lourde, et nécessite PSAPI.DLL (donc NT, 2000, XP).
1. Écrire une fonction GetModuleFromProcAddress() qui fait :
1.1. Appeler EnumProcessModules() pour obtenir un tableau des handles des DLL du process
1.2. Pour chaque handle, appeler GetModuleInformation() pour connaître l'adresse de chargement et la taille occupée par chaque DLL, jusqu'à trouver celle qui contient une adresse de code donnée.
2. Écrire une fonction GetModuleSelf() qui appelle la précédente en lui donnant son adresse (de l'appelant, donc) comme paramètre. La mettre dans un ".h" si on veut l'utiliser un peu partout.
Voilà. Quand tu appelles GetModuleSelf(), tu botiens le handle la DLL où elle se trouve, et tu peux appeler GetModuleFileName() dessus.
// Enumérer toutes les DLL du processus // Obtient handles de tous les modules chargés par le process HANDLE hProcess = ::GetCurrentProcess(); HMODULE ahMods[1024] = {0}; DWORD nNeeded = 0;
-- ___________ 31/03/2005 15:07:38 _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Serge Paccalin
Le jeudi 31 mars 2005 à 12:44, JGP_NoMail a écrit dans fr.comp.os.ms-windows.programmation :
Bonjour,
Comment connaitre le nom du fichier dll ou le handle de la DLL ?
- GetModuleFileName( NULL, ModuleFileName,sizeof(ModuleFileName)); Me donne le nom du programme appelant
- GetModuleHandle( NULL); Me donne le handle du programme appelant
Me donne bien le nom complet de ma Dll, mais il faut deja que je connaisse le nom de la Dll
Cordialement,
JGP
J'ai bien trouvé une méthode, mais elle est un peu lourde, et nécessite PSAPI.DLL (donc NT, 2000, XP).
1. Écrire une fonction GetModuleFromProcAddress() qui fait :
1.1. Appeler EnumProcessModules() pour obtenir un tableau des handles des DLL du process
1.2. Pour chaque handle, appeler GetModuleInformation() pour connaître l'adresse de chargement et la taille occupée par chaque DLL, jusqu'à trouver celle qui contient une adresse de code donnée.
2. Écrire une fonction GetModuleSelf() qui appelle la précédente en lui donnant son adresse (de l'appelant, donc) comme paramètre. La mettre dans un ".h" si on veut l'utiliser un peu partout.
Voilà. Quand tu appelles GetModuleSelf(), tu obtiens le handle de la DLL où elle se trouve, et tu peux appeler GetModuleFileName() dessus.
// Enumérer toutes les DLL du processus // Obtient handles de tous les modules chargés par le process HANDLE hProcess = ::GetCurrentProcess(); HMODULE ahMods[1024] = {0}; DWORD nNeeded = 0;
-- ___________ 31/03/2005 15:07:38 _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Le jeudi 31 mars 2005 à 12:44, JGP_NoMail a écrit dans
fr.comp.os.ms-windows.programmation :
Bonjour,
Comment connaitre le nom du fichier dll ou le handle de la DLL ?
- GetModuleFileName( NULL, ModuleFileName,sizeof(ModuleFileName));
Me donne le nom du programme appelant
- GetModuleHandle( NULL);
Me donne le handle du programme appelant
Me donne bien le nom complet de ma Dll, mais il faut deja que je
connaisse le nom de la Dll
Cordialement,
JGP
J'ai bien trouvé une méthode, mais elle est un peu lourde, et nécessite
PSAPI.DLL (donc NT, 2000, XP).
1. Écrire une fonction GetModuleFromProcAddress() qui fait :
1.1. Appeler EnumProcessModules() pour obtenir un tableau des handles
des DLL du process
1.2. Pour chaque handle, appeler GetModuleInformation() pour connaître
l'adresse de chargement et la taille occupée par chaque DLL, jusqu'à
trouver celle qui contient une adresse de code donnée.
2. Écrire une fonction GetModuleSelf() qui appelle la précédente en lui
donnant son adresse (de l'appelant, donc) comme paramètre. La mettre
dans un ".h" si on veut l'utiliser un peu partout.
Voilà. Quand tu appelles GetModuleSelf(), tu obtiens le handle de la DLL
où elle se trouve, et tu peux appeler GetModuleFileName() dessus.
// Enumérer toutes les DLL du processus
// Obtient handles de tous les modules chargés par le process
HANDLE hProcess = ::GetCurrentProcess();
HMODULE ahMods[1024] = {0};
DWORD nNeeded = 0;
--
___________ 31/03/2005 15:07:38
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
Me donne bien le nom complet de ma Dll, mais il faut deja que je connaisse le nom de la Dll
Cordialement,
JGP
J'ai bien trouvé une méthode, mais elle est un peu lourde, et nécessite PSAPI.DLL (donc NT, 2000, XP).
1. Écrire une fonction GetModuleFromProcAddress() qui fait :
1.1. Appeler EnumProcessModules() pour obtenir un tableau des handles des DLL du process
1.2. Pour chaque handle, appeler GetModuleInformation() pour connaître l'adresse de chargement et la taille occupée par chaque DLL, jusqu'à trouver celle qui contient une adresse de code donnée.
2. Écrire une fonction GetModuleSelf() qui appelle la précédente en lui donnant son adresse (de l'appelant, donc) comme paramètre. La mettre dans un ".h" si on veut l'utiliser un peu partout.
Voilà. Quand tu appelles GetModuleSelf(), tu obtiens le handle de la DLL où elle se trouve, et tu peux appeler GetModuleFileName() dessus.
// Enumérer toutes les DLL du processus // Obtient handles de tous les modules chargés par le process HANDLE hProcess = ::GetCurrentProcess(); HMODULE ahMods[1024] = {0}; DWORD nNeeded = 0;
-- ___________ 31/03/2005 15:07:38 _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Aurélien REGAT-BARREL
> - GetModuleFileName( NULL, ModuleFileName,sizeof(ModuleFileName)); Me donne le nom du programme appelant
Il faut utiliser le hinstDll reçu dans DllMain() au lieu de NULL.
-- Aurélien REGAT-BARREL
> - GetModuleFileName( NULL, ModuleFileName,sizeof(ModuleFileName));
Me donne le nom du programme appelant
Il faut utiliser le hinstDll reçu dans DllMain() au lieu de NULL.