Partager via


CommandLineEventConsumer, classe

La classe CommandLineEventConsumer démarre un processus arbitraire dans le système local quand un événement lui est remis. Cette classe est l’un des consommateurs d’événements standard fournis par WMI. Pour plus d’informations, consultez Monitoring des événements et réponse à ces derniers avec des consommateurs standard.

Notes

Quand vous utilisez la classe CommandLineEventConsumer, sécurisez l’exécutable à démarrer. Si l’exécutable ne se trouve pas dans un emplacement sécurisé, ou s’il n’est pas sécurisé à l’aide d’une liste ACL (liste de contrôle d’accès), un utilisateur non autorisé peut remplacer votre exécutable par un exécutable malveillant. Pour plus d’informations sur les listes ACL, consultez la section Sécurité du kit SDK Microsoft Windows, puis consultez Création d’un descripteur de sécurité pour un nouvel objet.

Syntaxe

[AMENDMENT]
class CommandLineEventConsumer : __EventConsumer
{
  uint8   CreatorSID[];
  string  MachineName;
  uint32  MaximumQueueSize;
  string  CommandLineTemplate;
  boolean CreateNewConsole = False;
  boolean CreateNewProcessGroup = True;
  boolean CreateSeparateWowVdm = False;
  boolean CreateSharedWowVdm = False;
  string  DesktopName;
  string  ExecutablePath;
  uint32  FillAttributes;
  boolean ForceOffFeedback = False;
  boolean ForceOnFeedback = False;
  uint32  KillTimeout = 0;
  string  Name;
  sint32  Priority = 0x20;
  boolean RunInteractively = False;
  uint32  ShowWindowCommand;
  boolean UseDefaultErrorMode = False;
  string  WindowTitle;
  string  WorkingDirectory;
  uint32  XCoordinate;
  uint32  XNumCharacters;
  uint32  XSize;
  uint32  YCoordinate;
  uint32  YNumCharacters;
  uint32  YSize;
  uint32  FillAttribute;
};

Membres

La classe CommandLineEventConsumer comporte les types de membre suivants :

Propriétés

La classe CommandLineEventConsumer comporte les propriétés suivantes.

CommandLineTemplate

Type de données : chaîne

Type d'accès : Lecture seule

Modèle de chaîne standard qui spécifie le processus à démarrer. Cette propriété peut avoir une valeur NULL. La propriété ExecutablePath est utilisée en tant que ligne de commande.

CreateNewConsole

Type de données : booléen

Type d'accès : Lecture seule

Non utilisé. Si une valeur est affectée à cette propriété, un message de suivi est généré. Pour plus d’informations, consultez Suivi de l’activité WMI.

CreateNewProcessGroup

Type de données : booléen

Type d'accès : Lecture seule

Si la valeur est True, le nouveau processus est le processus racine d’un nouveau groupe de processus. Le groupe de processus comprend tous les processus descendants de ce processus racine. L’identificateur de processus du nouveau groupe de processus est identique à cet identificateur de processus. Les groupes de processus sont utilisés par la méthode GenerateConsoleCtrlEvent pour permettre l’envoi d’un signal Ctrl+C ou Ctrl+Pause à un groupe de processus de console.

CreateSeparateWowVdm

Type de données : booléen

Type d'accès : Lecture seule

Si la valeur est True, le nouveau processus s’exécute sur une VDM (machine virtuelle DOS) privée. Cela est valide uniquement au moment du démarrage d’une application s’exécutant sur un système d’exploitation Windows 16 bits. Si la valeur est False, toutes les applications s’exécutant sur un système d’exploitation Windows 16 bits s’exécutent en tant que threads dans une seul VDM partagée. Pour plus d’informations, consultez la section Remarques de cette rubrique.

CreateSharedWowVdm

Type de données : booléen

Type d'accès : Lecture seule

Si la valeur est True, la méthode CreateProcess exécute le nouveau processus dans la VDM (machine virtuelle DOS) partagée. Cette propriété peut remplacer le commutateur DefaultSeparateVDM dans la section Windows de Win.ini, si elle a la valeur True. Pour plus d’informations, consultez la section Remarques de cette rubrique.

CreatorSID

Type de données : tableau uint8

Type d'accès : Lecture seule

Identificateur de sécurité (SID) qui identifie de manière unique l’utilisateur qui crée un filtre. WMI stocke le SID de l’utilisateur qui crée une instance de __EventConsumer ou le SID de l’administrateur, en fonction du système d’exploitation. Pour plus d’informations, consultez Liaison d’un filtre d’événement à un consommateur logique et Monitoring des événements et réponse à ces derniers avec des consommateurs standard.

Cette propriété est héritée de __EventConsumer.

DesktopName

Type de données : chaîne

Type d'accès : Lecture seule

Non utilisé. Si une valeur est affectée à cette propriété, un message de suivi est généré. Pour plus d’informations, consultez Suivi de l’activité WMI.

ExecutablePath

Type de données : chaîne

Type d'accès : Lecture seule

Module à exécuter. La chaîne peut spécifier le chemin complet et le nom de fichier du module à exécuter, ou elle peut spécifier un nom partiel. Si un nom partiel est spécifié, le lecteur et le répertoire actifs sont utilisés par défaut.

La propriété ExecutablePath peut avoir une valeur NULL. Dans ce cas, le nom du module doit être le premier jeton délimité par des espaces blancs dans la valeur de la propriété CommandLineTemplate. Si vous spécifiez un nom de fichier long qui contient un espace, utilisez des chaînes entre guillemets pour indiquer la fin du nom de fichier et le début des arguments afin de clarifier le nom de fichier.

Notes

Dans la mesure où la propriété CommandLineTemplate peut être un modèle où le module à exécuter est fourni par une variable, une propriété ExecutablePath ayant une valeur NULL autorise le module spécifié dans le paramètre à s’exécuter, puis passe hors de votre contrôle. Définissez toujours la propriété ExecutablePath dans l’inscription de CommandLineEventConsumer pour inclure l’exécutable nécessaire, ce qui évite son remplacement par les paramètres d’événements. Si vous devez utiliser un modèle et une variable pour spécifier le module à exécuter, veillez à déterminer qui se voit octroyer le privilège d’écriture complet dans l’espace de noms.

FillAttribute

Type de données : uint32

Type d'accès : Lecture seule

Spécifie les couleurs initiales du texte et de l’arrière-plan si une fenêtre de console est créée dans une application console

FillAttributes

Type de données : uint32

Type d’accès : lecture/écriture

Couleurs initiales du texte et de l’arrière-plan, si une fenêtre de console est créée dans une application console. Cette propriété est ignorée dans une application GUI. La valeur peut correspondre à n’importe quelle combinaison des valeurs suivantes.

1 (0x1)

premier plan bleu

2 (0x2)

premier plan vert

4 (0x4)

premier plan rouge

8 (0x8)

intensité du premier plan

16 (0x10)

arrière-plan bleu

32 (0x20)

arrière-plan vert

64 (0x40)

arrière-plan rouge

128 (0x80)

intensité de l’arrière-plan

Par exemple, les combinaisons suivantes produisent du texte en rouge sur un arrière-plan blanc :

0x4 | 0x40 | 0x20 | 0x10

ou

0x74

ForceOffFeedback

Type de données : booléen

Type d'accès : Lecture seule

Si la valeur est True, le curseur de rétroaction est désactivé de force durant le démarrage du processus. Le curseur normal s’affiche.

ForceOnFeedback

Type de données : booléen

Type d'accès : Lecture seule

Si la valeur est True, le curseur est en mode de rétroaction pendant deux secondes après l’appel de CreateProcess. Pendant ces deux secondes, si le processus effectue le premier appel GUI, le système accorde cinq secondes supplémentaires au processus. Pendant ces cinq secondes, si le processus affiche une fenêtre, le système accorde cinq secondes supplémentaires au processus pour finir le dessin de la fenêtre.

KillTimeout

Type de données : uint32

Type d'accès : Lecture seule

Nombre de secondes pendant lesquelles le service WMI attend avant de tuer un processus. 0 (zéro) indique qu’un processus ne doit pas être tué. Le fait de tuer un processus l’empêche de s’exécuter indéfiniment.

MachineName

Type de données : chaîne

Type d'accès : Lecture seule

Nom de l’ordinateur auquel WMI (Windows Management Instrumentation) envoie les événements.

Cette propriété est héritée de __EventConsumer.

MaximumQueueSize

Type de données : uint32

Type d'accès : Lecture seule

File d’attente maximale pour un consommateur spécifique, en octets.

Cette propriété est héritée de __EventConsumer.

Nom

Type de données : chaîne

Type d'accès : Lecture seule

Qualificateurs : clé

Nom unique d’un consommateur.

Priorité

Type de données : sint32

Type d'accès : Lecture seule

Niveau de priorité de planification des threads de processus. La liste suivante établit les niveaux de priorité disponibles.

32 (0x20)

Indique un processus normal sans besoins de planification.

64 (0x40)

Indique un processus dont les threads s’exécutent uniquement quand le système est inactif. Ils sont préemptés par les threads des processus s’exécutant dans une classe de priorité plus élevée. Un écran de veille est un bon exemple. Les processus enfants héritent de la classe de priorité inactive.

128 (0x80)

Indique un processus qui effectue des tâches hautement prioritaires, dont le temps d’attente est critique. Les threads d’un processus de classe de haute priorité prévalent sur les threads des processus de classe de priorité normale ou de priorité inactive. La liste des tâches, par exemple, doit répondre rapidement quand elle est appelée par l’utilisateur, quelle que soit la charge sur le système. Soyez très prudent quand vous utilisez la classe de haute priorité, car une application utilisant le processeur de manière intensive avec une classe de haute priorité peut utiliser presque tous les cycles disponibles.

256 (0x100)

Indique un processus qui a la priorité la plus élevée possible. Les threads d’un processus de classe de priorité en temps réel prévalent sur les threads de tous les autres processus, notamment les processus du système d’exploitation qui effectuent des tâches importantes. Par exemple, un processus en temps réel dont l’exécution se prolonge au-delà d’un bref intervalle peut empêcher le vidage des caches de disque, ou nuire au bon fonctionnement de la souris.

RunInteractively

Type de données : booléen

Type d'accès : Lecture seule

Si la valeur est True, le processus est lancé dans la WinStation interactive. Si la valeur est False, le processus est lancé dans la WinStation de service par défaut. Cette propriété remplace la propriété DesktopName. Cette propriété est utilisée uniquement de manière locale, et uniquement si l’utilisateur interactif est l’utilisateur qui a configuré le consommateur.

À partir de Windows Vista, le processus qui exécute l’instance de CommandLineEventConsumer démarre sous le compte LocalSystem et se trouve dans la session 0. Les services qui s’exécutent dans la session 0 ne peuvent pas interagir avec les sessions utilisateur.

ShowWindowCommand

Type de données : uint32

Type d'accès : Lecture seule

État d’affichage de la fenêtre. Il peut s’agir de l’une des valeurs spécifiées dans le paramètre nCmdShow de la fonction ShowWindow.

UseDefaultErrorMode

Type de données : booléen

Type d'accès : Lecture seule

Si la valeur est True, le mode d’erreur par défaut est utilisé.

WindowTitle

Type de données : chaîne

Type d'accès : Lecture seule

Titre qui apparaît dans la barre de titre du processus. Cette propriété est ignorée pour les applications GUI.

WorkingDirectory

Type de données : chaîne

Type d'accès : Lecture seule

Répertoire de travail de ce processus.

XCoordinate

Type de données : uint32

Type d'accès : Lecture seule

Décalage X, en pixels, entre le bord gauche de l’écran et le bord gauche de la fenêtre, si une fenêtre est créée.

XNumCharacters

Type de données : uint32

Type d'accès : Lecture seule

Largeur de la mémoire tampon d’écran, en colonnes de caractères, si une fenêtre de console est créée. Cette propriété est ignorée dans un processus GUI.

XSize

Type de données : uint32

Type d'accès : Lecture seule

Largeur, en pixels, d’une nouvelle fenêtre, si une fenêtre est créée.

YCoordinate

Type de données : uint32

Type d'accès : Lecture seule

Décalage Y, en pixels, entre le bord supérieur de l’écran et le bord supérieur de la fenêtre, si une fenêtre est créée.

YNumCharacters

Type de données : uint32

Type d'accès : Lecture seule

Hauteur de la mémoire tampon d’écran, en lignes de caractères, si une fenêtre de console est créée. Cette propriété est ignorée dans un processus GUI.

YSize

Type de données : uint32

Type d'accès : Lecture seule

Hauteur, en pixels, de la nouvelle fenêtre, si une fenêtre est créée.

Notes

La classe CommandLineEventConsumer est dérivée de la classe abstraite __EventConsumer.

La propriété CreateSeparateWowVdm indique si le nouveau processus s’exécute ou non dans une VDM (machine virtuelle DOS) privée. Dans le cas d’une exécution séparée, tout plantage entraîne uniquement l’arrêt de la VDM, ce qui représente un avantage. Les programmes s’exécutant dans des VDM distinctes continuent de fonctionner normalement. De plus, les applications Windows 16 bits s’exécutant dans des VDM distinctes ont des files d’attente d’entrée distinctes. Cela signifie que si une application cesse de répondre momentanément, les applications situées dans des VDM distinctes continuent de recevoir des entrées. L’inconvénient d’une exécution séparée est qu’elle utilise beaucoup plus de mémoire. Vous devez affecter la valeur True à cette propriété uniquement si l’utilisateur souhaite que les applications Windows 16 bits s’exécutent dans leur propre VDM.

Notes

CommandLineEventConsumer utilise la méthode CreateProcess de manière interne, et passe les propriétés ExecutablePath et CommandLineTemplate en tant que paramètres lpApplicationName et lpCommandLine. L’exemple de code au format MOF (Managed Object Format) suivant n’utilise pas correctement CommandLineEventConsumer.

instance of CommandLineEventConsumer
{
  ExecutablePath = "C:\\windows\\system32\\cscript.exe";
  CommandLineTemplate = "C:\\scripts\\MyScript.js param1 param2";
};

La méthode CreateProcess passe lpCommandLine en tant que argv[0], argv[1], etc. Dans la mesure où argv[0] pour les applications 16 bits était réservé au nom de fichier exécutable, le code MOF précédent entraîne la création du processus, comme si la commande suivante était entrée à l’invite de commandes : c:\windows\system32\cscript.exe param1 param2.

La commande précédente n’aboutit pas, car Cscript.exe ne voit pas argv[0]. Il ne peut donc pas détecter qu’il ne contient pas son propre nom, mais quelque chose d’autre (« c:\\scripts\\MyScript.js »). L’exemple suivant identifie l’utilisation recommandée de CommandLineEventConsumer.

instance of CommandLineEventConsumer
{
  ExecutablePath = "C:\\windows\\system32\\cscript.exe";
  CommandLineTemplate = "C:\\windows\\system32\\cscript.exe"
    "C:\\scripts\\MyScript.js param1 param2";
};

L’utilisation précédente de CommandLineEventConsumer entraîne la création du processus, comme si la commande suivante était entrée à l’invite de commandes : c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2

Dans la mesure où « c :\\scripts\\MyScript.js » a désormais la valeur argv[1], il est vu par Cscript.exe et la commande réussit.

Pour plus d’informations, consultez la fonction CreateProcess.

Exemples

Pour obtenir un exemple d’utilisation de CommandLineEventConsumer afin de créer un consommateur, consultez Exécution d’un programme à partir de la ligne de commande en fonction d’un événement.

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows Vista
Serveur minimal pris en charge
Windows Server 2008
Espace de noms
Root\subscription
MOF
Wbemcons.mof
DLL
Wbemcons.dll

Voir aussi

Classes de consommateur standard

Monitoring des événements et réponse à ces derniers avec des consommateurs standard

Création d’un consommateur logique

Réception d’événements à tout moment

__EventConsumer