Accueil > Forum > > > > Lister les process utilisant une dll
Lister les process utilisant une dll
vendredi 13 novembre 2009 à 20:51:11 |
Lister les process utilisant une dll

alphaone
|
Bonjour, j'aimerai obtenir tout les pids utilisant une dll que je connait d'avance, j'ai donc trouvé ce code:
http://www.cppfrance.com/code.aspx?ID=19391
Mais pas moyen d'isolé juste ce que je vaus, je sais que mais connaissance en win32 sont assez limité.
|
|
samedi 14 novembre 2009 à 16:24:54 |
Re : Lister les process utilisant une dll

rt15
|
Salut,
Regarde ce thread (Le dernier post surtout).
Tout est basé sur CreateToolhelp32Snapshot, que ce soit la recherche des processus ou pour lister les modules (.dll, .exe...) de ces processus.
|
|
samedi 14 novembre 2009 à 16:51:09 |
Re : Lister les process utilisant une dll

alphaone
|
J'ai fait ce code:
Code C/C++ : bool WINAPI DLLEjecteurW(DWORD dwPid,PWSTR szDLLPath)
{
/* Search address of module */
MODULEENTRY32W meModule;
meModule.dwSize = sizeof(meModule);
HANDLE hSnapshot = NULL;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPid);
if(hSnapshot == NULL)
return false;
/* Search the right modules of the process */
Module32FirstW(hSnapshot, &meModule);
do{
if((lstrcmpiW(meModule.szModule,szDLLPath) == 0) || (lstrcmpiW(meModule.szExePath,szDLLPath) == 0))break;
}while(Module32NextW(hSnapshot, &meModule));
/* Get handle of the process */
HANDLE hProcess;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, false,dwPid);
if(hProcess == NULL)
{
CloseHandle(hSnapshot);
return false;
}
LPTHREAD_START_ROUTINE lpthThreadFunction;
/* Get addresse of FreeLibrary in kernel32.dll */
lpthThreadFunction = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "FreeLibrary");
if(lpthThreadFunction == NULL)
{
CloseHandle(hProcess);
CloseHandle(hSnapshot);
return false;
}
/* Creation the remote thread */
DWORD dwThreadID = 0;
HANDLE hThread = NULL;
hThread = CreateRemoteThread(hProcess, NULL, 0, lpthThreadFunction,meModule.modBaseAddr, 0, &dwThreadID);
if(hThread == NULL)
{
CloseHandle(hSnapshot);
CloseHandle(hProcess);
return false;
}
WaitForSingleObject(hThread,INFINITE);
CloseHandle(hProcess);
CloseHandle(hThread);
return true;
}
void HardUnloadDLL(QString myDllName)
{
//QFile theDllFile(myDllName);
//myDllName=theDllFile.fileName();
DEBUGCONSOLE(90,"HardUnloadDLL","start");
HANDLE hSnapShot1;
PROCESSENTRY32 uProcess;
HANDLE hSnapShot2;
MODULEENTRY32 me32;
QString DllLoaded = "";
QString DllLoadedName = "";
QString DllLoadedPath = "";
bool bResult;
bool r;
short NbProcess;
NbProcess=0;
hSnapShot1 = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
r = Process32First(hSnapShot1, &uProcess);
while ( r )
{
r = Process32Next(hSnapShot1, &uProcess);
QString myProcessName;
myProcessName=QString::fromWCharArray(uProcess.szExeFile);
if (uProcess.th32ProcessID < 99999)
{
hSnapShot2 = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, uProcess.th32ProcessID );
if ((int)hSnapShot2 != -1 )
{
me32.dwSize = sizeof(me32);
bResult = Module32First( hSnapShot2, &me32 );
while( bResult )
{
DllLoaded=QString::fromWCharArray(me32.szExePath);
DllLoadedName=QString::fromWCharArray(me32.szModule);
if (DllLoaded == myDllName)
{
DEBUGCONSOLE(90,"RegisterShellExtDll","The path: "+DllLoaded);
DEBUGCONSOLE(90,"RegisterShellExtDll",myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
DLLEjecteurW(uProcess.th32ProcessID,me32.szExePath);
}
bResult = Module32Next( hSnapShot2, &me32 );
}
}
else
{
DEBUGCONSOLE(90,"HardUnloadDLL","(int)hSnapShot2 != -1 for "+myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
}
if(hSnapShot2)
CloseHandle(hSnapShot2);
}
else
{
DEBUGCONSOLE(90,"HardUnloadDLL","uProcess.th32ProcessID > 99999 for "+myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
}
}
CloseHandle(hSnapShot1);
}
Il marche pour:
les process 32Bits -> dll 32Bits
les process 64Bits -> dll 64Bits
Mais pas pour:
les process 64Bits -> dll 32Bits
Comment résourdre ce probléme?
Mon projet Qt: http://ultracopier-fr.first-world.fr/
|
|
samedi 14 novembre 2009 à 18:51:08 |
Re : Lister les process utilisant une dll

rt15
|
64 bits ? C'est quoi ?
Franchement, je sais même pas comment peut fonctionner une dll 32 bits au sein d'un processus 64 bits. Genre une fonction de la dll prend en argument une chaîne. La chaîne est adressé en 64 bits dans le processus par l'appelant. Il faut cependant donner une adresse 32 bits à la dll... Chaud !
Breuh hum.
Au fait, tu as localisé ce qui coince ? C'est le FreeLibrary qui échoue ou c'est avant ?
|
|
samedi 14 novembre 2009 à 19:27:18 |
Re : Lister les process utilisant une dll

alphaone
|
Non je n'est hélas pu localisé ou ça coince, (je pense que je suis trop limité coté windows).
Mon projet Qt: http://ultracopier-fr.first-world.fr/
|
|
samedi 14 novembre 2009 à 20:05:46 |
Re : Lister les process utilisant une dll

rt15
|
C'est marrant, d'après cet article, c'est impossible de charger une dll 32 bits dans un process 64 bits. C'est vrai que ça me paraît bien aussi.
Et voilà une citation de SetWindowsHookEx :
SetWindowsHookEx can be used to inject a DLL into another process. A 32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be injected into a 32-bit process. If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes. The 32-bit and 64-bit DLLs must have different names.
Tu es sûr que c'est possible ?
|
|
samedi 14 novembre 2009 à 21:03:59 |
Re : Lister les process utilisant une dll

alphaone
|
Mon but est de décharger un dll 32Bits d'un programme 32Bits depuis un programme 64Bits.
Ma dll est chargé avec sucés.
|
|
samedi 14 novembre 2009 à 21:10:39 |
Re : Lister les process utilisant une dll

BruNews
|
Pas de DLL 32 dans proces 64, c'est impossible.
En plus de la taille des params (adresses ou autres), le 64 bosse en fastcall alors que le 32 est en stdcall, ce serait badaboum au 1er appel de fonction.
ciao...
BruNews, MVP VC++
|
|
samedi 14 novembre 2009 à 21:15:05 |
Re : Lister les process utilisant une dll

alphaone
|
Mon but est de décharger un dll 32Bits d'un programme 32Bits depuis un programme 64Bits.
Ma dll est chargé avec sucés.
Mon projet Qt: http://ultracopier-fr.first-world.fr/
|
|
samedi 14 novembre 2009 à 21:36:48 |
Re : Lister les process utilisant une dll

rt15
|
Ah ok ! Ca me rassure.
Bon par contre c'est normal que ton programme en 64 bits ne fonctionne pas sur une dll 32.
Sur cette ligne :
Code C/C++ : lpthThreadFunction = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "FreeLibrary");
Tu récupère un handle sur kernel32 dans ton propre processus, donc sur une kernel32... 64 bits ! De même l'adresse de FreeLibrary que tu récupères est sur 64 bits.
Donc forcément, quand tu fait CreateRemoteThread, tu lui passe cette adresse sur 64 bits qui ne correspond à rien dans l'autre processus qui a un kernel32 32 bits, et qui en plus est dans un adressage 32 bits...
Même si tu ne peux pas passer physiquement d'adresse sur 32 bits à CreateRemoteThread, il est probable que l'on peut s'en servir en mettant une adresse de 32 bits dans les 32 bits de poids faible de l'adresse sur 64 bits attendue.
Par contre, faudrait que tu trouves l'adresse de FreeLibrary dans l'autre processus... Ce qui n'est pas évident ! Tu dois cependant pouvoir récupérer l'adresse de kernel32 avec CreateToolhelp32Snapshot (Comme tu l'as fait pour ta dll à décharger), ensuite utiliser ReadProcessMemory pour exploiter le header PE et ainsi déterminer l'adresse de FreeLibrary. Mais c'est quand même assez lourd...
|
|
Cette discussion est classée dans : code, dll, process, lister
Répondre à ce message
Sujets en rapport avec ce message
Dll en c++ dans du code C [ par rurouni41 ]
bonjour, je dois integrer une DLL codee en C++ dans un programme en c...Donc je voulais savoir s'il y avait moyen(et comment faire) d ouvrir et d'util
Lien explicite de DLL [ par garslouche ]
Bonjour,j'aimerai savoir si quelqu'un sait comment on accède à une variable (et pas à une fonction) en ayant lié explicitement une DLL ? En gros mon c
(MS VCpp) Problème de variables [ par YS1 ]
J'ai créé une DLL C+PP que je souhaite utiliser dans un programe VB.La fonction principale de la DLL renvoie un certain nombre de variables, qui sont
gestion des exceptions dans Visual C++ 6 [ par devmail ]
Bonjour a tous,je suis en cours de developpement d'un programme compose d'un prg principale et de plusieurs dll. J'ai terminer les traitements et souh
DLL activeX [ par guiguimac ]
Bonjour,n'ayant jamais rien fait de trés poussé en C++, j'aimerai savoir si qq'un dispose d'un tut ou d'un exemple de code permettant la réalisation d
Idle - Hook - dll [ par Manson ]
Bonjour,voila, j'ai trouve le code d'une dll permettant de savoirdepuis combien de temps le PC est inactif.Mais voila, elle a un probleme, quelque foi
processus [ par sebseb42 ]
Bonjour,voila, j'utilise l'API Process Status (PSAPI) pour lister tout les process existant ainsi que leur modules...La seul information que j'arrive
Utilisation DLL SANS .lib [ par nasedo47 ]
J'ai récupéré une DLL sur un site ainsi qu'une page avec les prototypes de toutes les fonctions contenues dans cette DLL.J'aimerais utiliser ces fonct
Dll LoadLibrary --> Erreur [ par mortiis ]
Bonjour à tous J'ai fait un prog qui devrais utiliser une dll pour faire un test j'ai fait un dll qui me fait afficher un MessageBox.Le problème est q
dll et lib [ par petitou ]
Salut, j'ai un problème lors de l'édition de lien à la compilation avec ma dll dans visual studio.Lorsque je crée ma dll qui utilise une lib, ça ne p
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|