[dev-c++][g++] lister les dll chargées par processus...

Soyez le premier à donner votre avis sur cette source.

Vue 7 785 fois - Téléchargée 553 fois

Description

Ce programme liste (en mode console) les DLL chargées par processus.
Il a été compilé avec G++ au sein de l'environnement DEV-C++, et testé sous Windows 2000.
Il utilse la classe NString de NitRic et nécessite la librairie libth32.a

XoowPS.exe -h retourne l'aide de la ligne de commande.

Source / Exemple :


#include <iostream>
#include <iomanip>
#include <windows.h>
#include <tlhelp32.h>
#include <string.h>
#include "nstring.h"
#include "res/resource.h"
#include "argparser.h"

void AfficheDLLParProcessus(int nopid)
{
    HANDLE hSnapShot1;
    PROCESSENTRY32 uProcess;
    HANDLE hSnapShot2;
    MODULEENTRY32 me32;
    String DllLoaded = "";
    bool bResult;
    bool r;
    
    hSnapShot1 = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);

    uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);

    r = Process32First(hSnapShot1, &uProcess);
       
    while ( r )  // Cette boucle énnumère tout les processus
    {
        r = Process32Next(hSnapShot1, &uProcess);
        
        if ((uProcess.th32ProcessID == nopid) || (nopid == 0)) 
        {        
        if (uProcess.th32ProcessID < 99999) {
        String myProcessName = uProcess.szExeFile;
        myProcessName.ToLower();
        std::cout << std::setw(4) << uProcess.th32ProcessID << " " << myProcessName << std::endl;
        
          hSnapShot2 = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, uProcess.th32ProcessID );
          
       if ((int)hSnapShot2 != -1 )
       {
              me32.dwSize = sizeof(me32);
              bResult = Module32First( hSnapShot2, &me32 );
              while( bResult )
              {

                            DllLoaded = me32.szExePath;
                            DllLoaded.ToLower();
                            std::cout << std::setw(4) << " " << DllLoaded << std::endl;
                            bResult = Module32Next( hSnapShot2, &me32 );
              }
       }
       
       if( hSnapShot2 ) CloseHandle( hSnapShot2 );
       //std::cout << std::endl;
       }
       }
    };
    
    CloseHandle(hSnapShot1);
}

void AfficheProcessusPourDLL(String myDllName)
{
    HANDLE hSnapShot1;
    PROCESSENTRY32 uProcess;
    HANDLE hSnapShot2;
    MODULEENTRY32 me32;
    String DllLoaded = "";
    String DllLoadedName = "";
    String DllLoadedPath = "";
    bool bResult;
    bool r;
    short NbProcess = 0;
    
    hSnapShot1 = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);

    uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);

    r = Process32First(hSnapShot1, &uProcess);
       
    while ( r )  // Cette boucle énnumère tout les processus
    {
        r = Process32Next(hSnapShot1, &uProcess);
        
        if (uProcess.th32ProcessID < 99999) {
        String myProcessName = uProcess.szExeFile;
        myProcessName.ToLower();
        
          hSnapShot2 = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, uProcess.th32ProcessID );
          
       if ((int)hSnapShot2 != -1 )
       {
              me32.dwSize = sizeof(me32);
              bResult = Module32First( hSnapShot2, &me32 );
              while( bResult )
              {

                            DllLoaded = me32.szExePath;
                            DllLoaded.ToLower();
                            DllLoadedName = me32.szModule;
                            DllLoadedName.ToLower();
                            if (DllLoadedName == myDllName)
                            {
                            if (NbProcess++ == 0) 
                            {
                                std::cout << "Le module DLL '" << DllLoadedName << "' ";
                                std::cout << "a pour chemin '" << DllLoaded << "' ";
                                std::cout << "et est utilisee par les processus suivants :" << std::endl;
                            }
                            std::cout << "- " << std::setw(4) << uProcess.th32ProcessID << " " << myProcessName << std::endl;
                            }
                            bResult = Module32Next( hSnapShot2, &me32 );
                            
              }
       }
       
       if( hSnapShot2 ) CloseHandle( hSnapShot2 );
       }
    };
    
    CloseHandle(hSnapShot1);
}

int main(int argc, char *argv[])
{
    /* --- VARIABLES ---*/
    int pid = 0; 
    String dllname = "";
    /* --- FIN VARIABLES ---*/    
    
    try
    {
        parse(argc,argv)
                .withDescription("Liste les DLL chargées pour chaque processus.")
                .forParameter('p',"pid", pid, "liste les DLL chargees pour le processus", false)
                .forParameter('d',"dll", dllname, "liste les processus utilisant la DLL specifiee", false);
    
        if (pid) AfficheDLLParProcessus(pid);
        if ((pid==0) && (dllname == "")) AfficheDLLParProcessus(0);
        if (dllname != "") AfficheProcessusPourDLL(dllname);
    }
    catch (Argument::error e)  // Now we treat gracefully the argument errors!
    {
        std::cout<<e.what()<<std::endl<<"use -h or --help for details"<<std::endl;
        exit(1);
    }   
    
    return 0;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaire
cs_HotSpot Messages postés 51 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 28 octobre 2004
27 mai 2003 à 10:54
je le savais pas .. merci ..

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.