web-dev-qa-db-fra.com

taskmgr.exe appelé avec un argument par Windows 7

J'ai remarqué quand j'appuie Ctrl+Alt+Del et cliquez sur Gestionnaire des tâches, Windows appelle taskmgr.exe /3 en tant que commande. Plusieurs sites Web affirment que le gestionnaire des tâches n'a pas d'argument de ligne de commande.

Task Manager Processes in the Process Explorer

Pourquoi Windows attache-t-il cet argument?

12
modiX

Une analyse

Apparemment, ce n'est pas un comportement documenté. J'ai fait des tests et noté mes conclusions:

  • Cliquez avec le bouton droit sur la barre des tâches, puis cliquez sur , puis sélectionnez Démarrer le gestionnaire de tâches .

    "C:\Windows\system32\taskmgr.exe" /4
    
  • Presse Ctrl+Shift+Esc.

    taskmgr.exe /2
    
  • Presse Ctrl+Alt+Delet cliquez sur Démarrez le Gestionnaire de tâches .

    taskmgr.exe /3
    
  • Démarrez un gestionnaire de tâches non élevé, puis cliquez sur le bouton Afficher les processus de tous les utilisateurs .

    "C:\Windows\system32\taskmgr.exe" /1
    
  • Tapez ou collez taskmgr.exe dans la barre de recherche du menu Démarrer, puis appuyez sur Enter; presse Win+R, tapez ou collez taskmgr.exe dans la zone de texte, puis appuyez sur Enter; accédez au dossier System32 et double-cliquez sur l'exécutable taskmgr.exe; démarrez l'utilitaire de configuration système (msconfig.exe), cliquez sur l'onglet Outils , sélectionnez l'élément Gestionnaire de tâches dans la liste, puis cliquez sur Lancer .

    "C:\Windows\system32\taskmgr.exe"
    
  • Ouvrez une invite de commande, tapez ou collez taskmgr.exe et appuyez sur Enter.

    taskmgr.exe
    

Remarques

  • Les choses ont fonctionné de la même manière pendant la phase de développement de Windows 8, jusqu'à la Release Preview. Windows Vista et les systèmes d'exploitation antérieurs ne sont pas affectés.

  • L'exécutable importe quelques API (à savoir GetCommandLineW et CommandLineToArgvW) utilisées pour extraire et analyser les arguments de la ligne de commande.

  • Démarrer manuellement le programme en utilisant l’un des arguments ci-dessus ne semble pas avoir d’effet notable.

Si je devais faire une supposition éclairée, je dirais que le paramètre numérique était censé être un indicateur de démarrage interne, éventuellement utilisé à des fins de débogage puis laissé de côté.

13
and31415

Quelques notes:

Le fait qu'une commande soit envoyée ne signifie pas qu'un programme accepte ces arguments, ni aucun.

Par exemple:

J'ai appelé taskmanager avec ma propre commande étrange et le comportement n'a pas changé:

enter image description here

Du point de vue de la programmation de base, toute application va avoir une méthode principale où les arguments peuvent être passés. Par exemple, une application Windows Form C # de base ressemble à quelque chose comme:

private void Form1_Load(object sender, EventArgs e)
        {

        }

Si je transmets des arguments amusants, rien ne se passe avec l'application, mais Process Explorer les intercepte et les affiche.

enter image description here

Si je décide explicitement de les gérer cependant, vous obtiendrez une interaction de la commande.

enter image description here

Et tout ce que je devais faire était de changer légèrement le point d’entrée du formulaire:

private void Form1_Load(object sender, EventArgs e)
        {
            string arguments = Environment.GetCommandLineArgs()[1];

            this.Text = arguments;
        }

Maintenant, revenons à votre question sur la raison pour laquelle il est là:

Si vous accédez à taskmgr.exe à partir du ctrl + alt + del méthode, vous voyez bien l’argument de commande "/ 3". Aussi si vous utilisez ctrl + shift + esc il passe/2 et si vous cliquez avec le bouton droit sur la barre des tâches et que vous cliquez sur "Démarrer le gestionnaire de tâches", le commutateur indiqué est/4.

Tout cela laisse à penser que Windows a peut-être besoin de savoir quelque chose ou a peut-être été presque implémenté pour le gestionnaire de tâches que nous ne connaissons pas. Par exemple, la sécurité dans Windows peut vouloir savoir si ctrl + alt + del a été utilisé pour appeler taskmgr.exe et non un script ou un utilisateur. Encore une fois, pure spéculation mais discussions comme celle-ci me fait penser que cela aurait pu être au moins une pensée.


Pour les infâmes tl; dr

Pour savoir pourquoi Windows transmet ces commandes, nous avons probablement besoin d'un membre de l'équipe de développement de Microsoft ou du code source. Il n'y a peut-être pas de meilleure réponse.

2
Austin T French