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 |
|
DLL |
|