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

Soyez le premier à donner votre avis sur cette source.

Vue 7 658 fois - Téléchargée 542 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
Messages postés
51
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
28 octobre 2004

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.