IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

probleme pour supprimer un processus


Sujet :

Windows

  1. #1
    Membre actif
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    Points : 204
    Points
    204
    Par défaut probleme pour supprimer un processus
    Bonjour a tous ! Lorsque j'utilise ce code servant a supprimer un processus et que j'attribut a argc la valeur 252 (PID de firefox) le programme ne se termine pas. Pouvez-vous m'aider ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <windows.h>
    BOOL SetDebugPrivileges(VOID) {
    /* cette fonction permet au processus courant d'obtenir le privilège DEBUG,
    autrement dit la capacité de manipuler n'importe quel processus du système...
    */
    DWORD dwPID;
    HANDLE hProcess;
    HANDLE hToken;
    LUID Luid;
    TOKEN_PRIVILEGES tpDebug;
    dwPID = GetCurrentProcessId();
    if ((hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)) == NULL) return FALSE;
    if (OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken) == 0) return FALSE;
    if ((LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid)) == 0) return FALSE;
    tpDebug.PrivilegeCount = 1;
    tpDebug.Privileges[0].Luid = Luid;
    tpDebug.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if ((AdjustTokenPrivileges(hToken, FALSE, &tpDebug, sizeof(tpDebug), NULL, NULL)) == 0) return FALSE;
    if (GetLastError() != ERROR_SUCCESS) return FALSE;
    CloseHandle(hToken);
    CloseHandle(hProcess);
    return TRUE;
    }
    
    #include <stdio.h>
    int main(int argc, char** argv) {
    /* cette fonction kille tous les processus dont le PID lui a été passé en argument
    */
    int i = 0;
    if (argc < 2) {
    puts("Usage: kill <PID 1> [<PID 2> ... <PID n>]");
    return 0;
    }
    if (SetDebugPrivileges() == 0) puts("Unable to grant debug privileges !");
    while (++i < argc) {
    DWORD dwPID;
    HANDLE hProcess;
    dwPID = atoi(argv[i]);
    if ((hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwPID)) != NULL) {
    if (TerminateProcess(hProcess, 0) == 0) printf("Unable to kill process %lu !\n", dwPID);
    CloseHandle(hProcess);
    } else printf("Unable to access process %lu !\n", dwPID);
    }
    return 0;
    }

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 136
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par warubi
    Bonjour a tous ! Lorsque j'utilise ce code servant a supprimer un processus et que j'attribut a argc la valeur 252 (PID de firefox) le programme ne se termine pas. Pouvez-vous m'aider ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <windows.h>
    BOOL SetDebugPrivileges(VOID) {
    /* cette fonction permet au processus courant d'obtenir le privilège DEBUG,
    autrement dit la capacité de manipuler n'importe quel processus du système...
    */
    DWORD dwPID;
    HANDLE hProcess;
    HANDLE hToken;
    LUID Luid;
    TOKEN_PRIVILEGES tpDebug;
    dwPID = GetCurrentProcessId();
    if ((hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)) == NULL) return FALSE;
    if (OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken) == 0) return FALSE;
    if ((LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid)) == 0) return FALSE;
    tpDebug.PrivilegeCount = 1;
    tpDebug.Privileges[0].Luid = Luid;
    tpDebug.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if ((AdjustTokenPrivileges(hToken, FALSE, &tpDebug, sizeof(tpDebug), NULL, NULL)) == 0) return FALSE;
    if (GetLastError() != ERROR_SUCCESS) return FALSE;
    CloseHandle(hToken);
    CloseHandle(hProcess);
    return TRUE;
    }
    
    #include <stdio.h>
    int main(int argc, char** argv) {
    /* cette fonction kille tous les processus dont le PID lui a été passé en argument
    */
    int i = 0;
    if (argc < 2) {
    puts("Usage: kill <PID 1> [<PID 2> ... <PID n>]");
    return 0;
    }
    if (SetDebugPrivileges() == 0) puts("Unable to grant debug privileges !");
    while (++i < argc) {
    DWORD dwPID;
    HANDLE hProcess;
    dwPID = atoi(argv[i]);
    if ((hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwPID)) != NULL) {
    if (TerminateProcess(hProcess, 0) == 0) printf("Unable to kill process %lu !\n", dwPID);
    CloseHandle(hProcess);
    } else printf("Unable to access process %lu !\n", dwPID);
    }
    return 0;
    }

    Bonjour,

    Je te conseille d'aérer ton code, tu auras plus de réponses.

  3. #3
    Membre actif
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    Points : 204
    Points
    204
    Par défaut
    Quelqu'un n'aurait pas une petite idee ?

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    Hello,
    moi j'utilise la meme chose mais je passe le nom du process et les fonctions windows detecte le PID du processs a tuer.

    Peut-etre ce code t'aidera-t-il :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (PID = isProcessRunning(SERVER_NAME))
    {
    hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, PID);
    TerminateProcess(hProcess, 0);
    }
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    short isProcessRunning(char * processName)
    {
    	HANDLE hSnapShot;
    	PROCESSENTRY32 uProcess;
    	BOOL r;
    	short PID = 0;
    
    	hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    	uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
    
    	r = Process32First(hSnapShot, &uProcess);
    	do
    	{
    		if (strstr(uProcess.szExeFile, processName))
    			PID = (short) uProcess.th32ProcessID;
    
    		r = Process32Next(hSnapShot, &uProcess);
    	}
    	while (r);
    	CloseHandle(hSnapShot);
    
    	return PID;
    }
    Ywan
    (ywan.lesoeur.free.fr)

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Quel programme ne se termine pas ?
    Le tien, ou celui que tu veux tuer de la manière la plus sale et la plus sanglante possible sous Windows ?
    As-tu essayé de le passer au debugger, ton programme ?

Discussions similaires

  1. Probleme pour supprimer un champ sur Grosse DB
    Par RichardR dans le forum Administration
    Réponses: 1
    Dernier message: 18/12/2008, 10h54
  2. C# et XML Probleme pour supprimer un noeud
    Par Zeuth dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/03/2007, 11h06
  3. [TASM] Problème pour supprimer un fichier
    Par infoelectronique dans le forum Assembleur
    Réponses: 2
    Dernier message: 16/06/2006, 00h47
  4. Réponses: 2
    Dernier message: 27/05/2006, 19h08
  5. Langage pour supprimer un processus
    Par Laeticia dans le forum Windows
    Réponses: 4
    Dernier message: 13/10/2005, 00h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo