Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++] Distinguere i vari processi

    Ciao ragazzi, io per terminare processi in C++ uso il seguente metodo:

    incude, spero di non essermene dimenticato qualcuno
    codice:
    #include <windows.h>
    #include <string>
    #include <sstream>
    #include <tlhelp32.h>
    #include <psapi.h>
    "Sniffa" i processi correnti.

    codice:
    BOOL SniffProcess(char * ProcessToSniff)
    {
    DWORD PiDProcess;
    HANDLE hProcess = NULL;
    PROCESSENTRY32 nProcess = {0};
    PPROCESS_MEMORY_COUNTERS mProcess;
    DWORD dProcess;
    string s_NomeProcesso;
    string s_ProcessToSniff;
    
    s_ProcessToSniff.assign(ProcessToSniff);
        
    hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if(hProcess != INVALID_HANDLE_VALUE) 
        {
        nProcess.dwSize = sizeof(PROCESSENTRY32);
        while(Process32Next(hProcess, &nProcess))
            {
            PiDProcess = nProcess.th32ProcessID;
            s_NomeProcesso.assign(nProcess.szExeFile);
            
            s_NomeProcesso = KillCapital(s_NomeProcesso);
            s_ProcessToSniff = KillCapital(s_ProcessToSniff);
            
            if(s_NomeProcesso == s_ProcessToSniff){
                //if(MessageBox(NULL,s_NomeProcesso.c_str(),"Terminare?",MB_ICONQUESTION|MB_YESNO)  == IDYES)
                KillProcess(PiDProcess, DELETE); return TRUE;}
            }
            
        }
    
    
    return FALSE;
    }
    questa funzione riduce a minuscoli i caratteri della stringa del nome del processo da terminare e di quello sniffato, in modo che se chiamo
    SniffProcess(Firefox.exe); e il processo è firefox.exe me lo termina comunque

    codice:
    string KillCapital(string str)
    {      
    for(int x = 0; x <= str.size()-1; x++)
    if((str.at(x) >= 'A') && (str.at(x) <= 'Z'))
    str.at(x) += 32;
    return str;
    }
    infine il DISTRUTTURE di processi

    codice:
    BOOL KillProcess(DWORD dwProcessId, UINT uExitCode)
    {
        DWORD dwDesiredAccess = PROCESS_TERMINATE;
        BOOL  bInheritHandle  = FALSE;
        HANDLE hProcess = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
        if (hProcess == NULL)
            return FALSE;
    
        BOOL result = TerminateProcess(hProcess, uExitCode);
    
        CloseHandle(hProcess);
    
        return result;
    }
    Ecco questo è il mio problema: se per esempio voglio terminare il processo di un'applicazione (poichè per svolgere ruoli sepecifici preferisco eseguire dei processi invece di creare tread (non sono ancora capace e penso che non sia ancora giunto il momento di imparare) ) e l'applicazione da terminare è stata rinominata es. da Firefox.exe a ciao.exe, avete qualche consiglio per terminare il processo? forse controllare la memoria che occupano, anche se sarebbe meglio analizzare il contenuto.... grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Non ho capito il problema ... che vorresti fare? Qual è il fine ultimo? Cosa stai scrivendo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Allora

    Il fine ultimo è questo:

    esempio piccolo programma in esecuzione:

    Progetto1.exe
    codice:
    int main()
    {
    while(1);
    return 0;
    }
    Se io chiamo la funzione di prima SniffProcess("Progetto1.exe"); esso verrà chiuso.
    Ma se io rinomino Progetto1.exe in ldssfgnvs.exe e chiamo la SniffProcess("Progetto1.exe"); ldssnfgvs.exe non verrà terminato....
    io vorrei trovare un modo di analizzare il contenuto dei processi e quando trovo
    codice:
    int main()
    {
    while(1);
    return 0;
    }
    o comunque una cosa che fa capire che è quello, anche se con nome diverso, lo termina.

    Spero di essere stato chiaro.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: Allora

    Originariamente inviato da kirakira93

    Spero di essere stato chiaro.
    Adesso sì ... ma non puoi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Se si tratta di un programma arbitrario, non puoi (o meglio, forse potresti ma con metodi piuttosto complessi).
    Se invece vuoi comunicare ad una tua altra applicazione di terminare, puoi fare sì che questa si predisponga ad ascoltare messaggi tramite una mailbox, una named pipe, un socket o qualcos'altro a cui il "terminatore" possa collegarsi, identificando così il processo in maniera univoca.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da MItaly
    Se si tratta di un programma arbitrario, non puoi (o meglio, forse potresti ma con metodi piuttosto complessi).
    Direi che non potrebbe neanche con metodi complessi ... almeno non senza possibilità di errori ...

    Se invece vuoi comunicare ad una tua altra applicazione di terminare, puoi fare sì che questa si predisponga ad ascoltare messaggi tramite una mailbox, una named pipe, un socket o qualcos'altro a cui il "terminatore" possa collegarsi, identificando così il processo in maniera univoca.
    Beh ... questo è abbastanza ovvio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    Direi che non potrebbe neanche con metodi complessi ... almeno non senza possibilità di errori ...
    Escludere errori è impossibile, ma se è noto come è fatto l'eseguibile principale se ne può confrontare l'immagine in memoria con quella nota (escludendo naturalmente tutte le zone degli header PE sovrascritte dal loader); o più semplicemente, si può andare a pescare nelle risorse incorporate dell'immagine caricata in memoria il nome originale dell'eseguibile. Nulla di completamente sicuro, ovviamente, ma con una buona possibilità di riuscita.
    Beh ... questo è abbastanza ovvio ...
    Magari non lo sapeva.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    xD

    Diciamo che non ho capito bene come applicare i due metodi in linguaggio C++...
    potreste farmi qualche esempio per terminare l'applicazione col ciclo for perfavore

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: xD

    Originariamente inviato da kirakira93
    Diciamo che non ho capito bene come applicare i due metodi in linguaggio C++...
    potreste farmi qualche esempio per terminare l'applicazione col ciclo for perfavore
    Che esempio? Ti abbiamo detto che non è affatto semplice (anzi, se parliamo di un codice come l'hai mostrato, senza risorse, senza distinzioni, è praticamente impossibile).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Allora... facciamo un esempio

    Allora... per un esempio che dovrebbe essere fattibile a tutti...
    se i rinomino il file firefox.exe in qualcosaltro.exe, che codice dovrei scrivere?
    firefox penso abbia caratteristiche abbastanza unusuali rispetto ad altri file

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.