Processus Windows et .NET

Résolu/Fermé
Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 février 2010 - 11 févr. 2010 à 11:23
Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 février 2010 - 17 févr. 2010 à 10:11
Bonjour à tous.

Je développe actuellement un service qui doit pouvoir surveiller et éventuellement killer le processus de mon choix.

Le problème est que mon service doit démarrer en Local\System et qu'il ne peut donc pas accéder à tous les processus voulus... Je cherche donc désespérement des fonctions permettant de :

- surveiller le statut (ne répond pas...) d'un processus

(le paramètre Responding de la classe Process ne permettant pas de récupérer ce statut pour des processus qui ne sont pas sur le même compte) et la ligne de commande tasklist /fi "STATUS eq not responding" étant paramétrée pour les systèmes anglais uniquement - intelligents chez Windows)

- tuer un processus

Kill ne marche pas sur un processus n'utilisant pas le même compte et taskkill marche en ligne de commande mais ne veut pas marcher avec moi sous C#... (M'enfin je peux m'être trompé dans ma syntaxe...)

Bref, j'ai vraiment besoin de votre aide...

Pour info, je travaille sous XP. Merci d'avance...
A voir également:

10 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
11 févr. 2010 à 12:24
Bonjour,

Quand tu dis « Le problème est que mon service doit démarrer en Local\System », il s'agit d'une contrainte de ton cahier des charges, ou c'est parce que tu n'as pas réussi à mettre autre chose ?

Le comportement que tu décris me paraît normal et sain ; que tu puisses surveiller / tuer n'importe quel processus avec des attributions moindres serait une grosse grosse faille de sécurité (et hop le virus qui tue le processus de l'anti-virus avant de s'installer tranquillou...)

Tu pourrais réhausser les attributions de Local\System, mais tu ouvres une faille béante dans ton système, donc ce n'est pas terrible.

Le mieux serait d'exécuter ton programme en tant qu'administrateur, d'où ma question au début de ma réponse ;)

Xavier
1
Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 février 2010
11 févr. 2010 à 14:01
Hello. Merci de ta réponse.

Pour la faille de sécurité, je suis tout à fait d'accord ;)

A vrai dire, le problème est que je veux pouvoir lancer l'analyse le plus tôt possible avant le démarrage de windows, et j'avais trouvé que le seul moyen était de le démarrer le service en Local\Sytem... (Je précise que je me suis mis à bosser sur ce projet il y a un mois et que j'ai du découvrir en autodidacte le fonctionnement des services Windows, ayant une formation plutôt orientée Linux, donc j'ai peut être mal compris certains points ^^)

Cela étant, si je devais changer le compte d'utilisateur, j'ai vu que l'installateur Windows permettait de démarrer le service sous un compte User, mais comment peut on le paramétrer? L'utilisateur devra rentrer lui même ses paramètres à l'installation?

Un gros merci pour ton aide, car je tournais en rond là...
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
11 févr. 2010 à 14:13
Tu as fait comme ça pour l'instant?
using System.Diagnostics;
 
public bool FindAndKillProcess(string name)
{
        foreach (Process clsProcess in Process.GetProcesses()) 
        {
                if (clsProcess.ProcessName.StartsWith(name))
                {
                        clsProcess.Kill();
                        return true;
                }
        }
        return false;
}


Tu as fait attention à ne pas mettre le .exe du processus? En gros si tu veux tuer notepad.exe faut juste mettre notepad dans name.

Enfin bon voilà je ne sais pas plus t'aider ^^
0
Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 février 2010
11 févr. 2010 à 14:19
Oui, pas de problèmes :) Mais l'erreur vient du fait que je suis en compte Local\System et que donc je ne peux ni accéder à la propriété responding, ni killer le processus d'un compte courrant... En gros le "notepad" ne m'apparait même pas...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
11 févr. 2010 à 14:25
Ah c'est pas sympa ça ^^

En même temps c'est pas prévu pour rien, si tu pouvais tuer les processus de tous les autres utilisateurs ce serait un peu facile ;)

Bonne chance :)
0
Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 février 2010
11 févr. 2010 à 14:28
Effectivement :P Mais je suis sur qu'il y a moyen de passer outre, car Windows propose bien des logiciels aux admins réseaux permettant de tuer des processus à distance du moment que le firewall n'est pas actif (taskkill)...
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
11 févr. 2010 à 14:30
Ces applis sont surement réalisées en C ou en C++ (voir même avec des snippets en ASM parfois) qui sont beaucoup plus proches du système.

En C# tu as toute cette énorme couche qu'est le .NET Framework qui t'empêche d'aller n'importe où je pense ;)
0
Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 février 2010
11 févr. 2010 à 14:49
Effectivement, ca doit être ca qui me bloque...

Malgré tout, si il existe un moyen en passant par un compte admin, je suis preneur :D
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 févr. 2010 à 16:27
Bonjour,

Recherche du côté de l'impersonnation.
Tu crées deux programmes : un qui est exécuté au démarrage de la machine en tant que Local\System, et qui va appeler le deuxième programme en tant qu'administrateur, en mettant bien login et mot de passe..

Qu'en penses-tu ?

Xavier
0
Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 février 2010
17 févr. 2010 à 10:11
L'idée était bonne, mais la solution était autre ^^

En fait, je me suis demandé ce qui différenciait une application d'un service (vu que mon code marchait dans une application) et j'ai alors pensé à "l'affichage". En fait, la propriété responding dépend de l'affichage du processus sur l'écran de l'utilisateur. Le programme sera, selon windows, en cours d'éxécution, si son affichage marche.

La solution est donc de valider l'option : autoriser ce service à interragir avec le bureau, et tous les problèmes s'envolent :P C'était tout con, et j'ai passé une semaine dessus :D
0