Compartir a través de


Clase CommandLineEventConsumer

La clase CommandLineEventConsumer inicia un proceso arbitrario en el sistema local cuando se le entrega un evento. Esta clase es uno de los consumidores de eventos estándar que proporciona WMI. Para más información, consulte Supervisión y respuesta a eventos con consumidores estándar.

Nota

Si usa la clase CommandLineEventConsumer, proteja el ejecutable que quiera iniciar. Si el archivo ejecutable no está en una ubicación segura o está protegido con una lista de control de acceso segura (ACL), cualquier usuario no autorizado puede reemplazar su ejecutable por otro malintencionado. Para más información sobre las ACL, visite la sección Seguridad del Kit de desarrollo de software (SDK) de Microsoft Windows y consulte Creación un descriptor de seguridad para un objeto nuevo.

Sintaxis

[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;
};

Miembros

La clase CommandLineEventConsumer tiene estos tipos de miembros:

Propiedades

La clase CommandLineEventConsumer tiene estas propiedades.

CommandLineTemplate

Tipo de datos: cadena

Tipo de acceso: solo lectura

Plantilla de cadena estándar que especifica el proceso que se va a iniciar. Esta propiedad puede ser NULL y la propiedad ExecutablePath se usa como línea de comandos.

CreateNewConsole

Tipo de datos: booleano

Tipo de acceso: solo lectura

No se usa. Si se asigna un valor a esta propiedad, se genera un mensaje de seguimiento. Para más información, consulte Seguimiento de la actividad de WMI.

CreateNewProcessGroup

Tipo de datos: booleano

Tipo de acceso: solo lectura

Si el valor es True, el nuevo proceso es el proceso raíz de un nuevo grupo de procesos. El grupo de procesos incluye todos los procesos descendientes de este proceso raíz. El identificador de proceso del nuevo grupo de procesos es el mismo que este. El método GenerateConsoleCtrlEvent usa grupos de procesos para habilitar el envío de una señal CTRL+C o CTRL+INTER a un grupo de procesos de consola.

CreateSeparateWowVdm

Tipo de datos: booleano

Tipo de acceso: solo lectura

Si el valor es True, el nuevo proceso se ejecuta en una máquina virtual de DOS (VDM). Esto solo es válido cuando se inicia una aplicación que se ejecuta en un sistema operativo Windows de 16 bits. Si se establece en False, todas las aplicaciones que se ejecutan en un sistema operativo Windows de 16 bits lo hacen como subprocesos en un único VDM compartido. Para más información, consulte la sección Observaciones.

CreateSharedWowVdm

Tipo de datos: booleano

Tipo de acceso: solo lectura

Si el valor es True, el método CreateProcess ejecuta el nuevo proceso en la máquina virtual compartida de DOS (VDM). Esta propiedad puede invalidar el modificador DefaultSeparateVDM en la sección Windows de Win.ini si se establece en True. Para más información, consulte la sección Observaciones.

CreatorSID

Tipo de datos: matriz uint8

Tipo de acceso: solo lectura

Id. de seguridad (SID) que identifica de forma única al usuario que crea un filtro. WMI almacena el SID del usuario que crea una instancia de __EventConsumer o el SID de administrador, en función del sistema operativo. Para más información, consulte Enlace de un filtro de eventos con un consumidor lógico y Supervisión y respuesta a eventos con consumidores estándar.

Esta propiedad se hereda de __EventConsumer.

DesktopName

Tipo de datos: cadena

Tipo de acceso: solo lectura

No se usa. Si se asigna un valor a esta propiedad, se genera un mensaje de seguimiento. Para más información, consulte Seguimiento de la actividad de WMI.

ExecutablePath _s

Tipo de datos: cadena

Tipo de acceso: solo lectura

Módulo que se ejecuta. La cadena puede especificar la ruta de acceso completa y el nombre de archivo del módulo que se va a ejecutar, o bien puede especificar un nombre parcial. Si se especifica un nombre parcial, se asumen la unidad y el directorio actuales.

La propiedad ExecutablePath puede tener el valor NULL. En ese caso, el nombre del módulo debe ser el primer token delimitado por espacios en blanco en el valor de la propiedad CommandLineTemplate. Si usa un nombre de archivo largo que contiene un espacio, use cadenas entre comillas para indicar dónde finaliza el nombre de archivo y comienzan los argumentos para aclarar el nombre de archivo.

Nota

Dado que la propiedad CommandLineTemplate puede ser una plantilla en la que una variable proporciona el módulo que se va a ejecutar, una propiedad ExecutablePathNULL permite que se ejecute el módulo especificado en el parámetro y, después, queda fuera de su control. Establezca siempre la propiedad ExecutablePath en el registro CommandLineEventConsumer para incluir el ejecutable necesario, lo que evita la sobrescritura por parte de parámetros de eventos. Si debe usar una plantilla y una variable para especificar el módulo que se va a ejecutar, tenga cuidado a quién se concede el privilegio de escritura completo en el espacio de nombres.

FillAttribute

Tipo de datos: uint32

Tipo de acceso: solo lectura

Especifica el texto inicial y los colores de fondo si se crea una ventana de consola en una aplicación de consola.

FillAttributes

Tipo de datos: uint32

Tipo de acceso: lectura/escritura

Texto inicial y los colores de fondo, si se crea una ventana de consola en una aplicación de consola. Esta propiedad se omite en las aplicaciones de GUI. El valor puede ser cualquier combinación de los siguientes valores.

1 (0x1)

primer plano azul

2 (0x2)

primer plano verde

4 (0x4)

primer plano rojo

8 (0x8)

intensidad del primer plano

16 (0x10)

fondo azul

32 (0x20)

fondo verde

64 (0x40)

fondo rojo

128 (0x80)

intensidad del fondo

Por ejemplo, las siguientes combinaciones generan texto rojo sobre un fondo blanco:

0x4 | 0x40 | 0x20 | 0x10

o

0x74

ForceOffFeedback

Tipo de datos: booleano

Tipo de acceso: solo lectura

Si el valor es True, se inhabilita el cursor de comentarios al iniciarse el proceso. Se muestra el cursor normal.

ForceOnFeedback

Tipo de datos: booleano

Tipo de acceso: solo lectura

Si el valor es True, el cursor está en modo de comentarios durante dos segundos después de llamar a CreateProcess. Durante esos dos segundos, si el proceso realiza la primera llamada a la GUI, el sistema concede cinco segundos más al proceso. Durante esos cinco segundos, si el proceso muestra una ventana, el sistema concede otros cinco segundos al proceso para finalizar el dibujo de la ventana.

KillTimeout

Tipo de datos: uint32

Tipo de acceso: solo lectura

Número, en segundos, que el servicio WMI espera antes de terminar un proceso 0 (cero) indica que no se va a terminar un proceso. Matar un proceso impide que un proceso se ejecute indefinidamente.

MachineName

Tipo de datos: cadena

Tipo de acceso: solo lectura

Nombre del equipo al que Instrumental de administración de Windows (WMI) envía eventos.

Esta propiedad se hereda de __EventConsumer.

MaximumQueueSize

Tipo de datos: uint32

Tipo de acceso: solo lectura

Cola máxima para un consumidor específico, en bytes.

Esta propiedad se hereda de __EventConsumer.

Nombre

Tipo de datos: cadena

Tipo de acceso: solo lectura

Calificadores: key

Nombre único de un consumidor.

Prioridad

Tipo de datos: sint32

Tipo de acceso: solo lectura

Nivel de prioridad de programación de los subprocesos del proceso. En la lista siguiente se enumeran los niveles de prioridad disponibles.

32 (0x20)

Indica un proceso normal sin necesidades de programación.

64 (0x40)

Indica un proceso cuyos subprocesos se ejecutan solo cuando el sistema está inactivo y se reemplacen por los subprocesos de cualquier proceso que se ejecuta en una clase de mayor prioridad. Un ejemplo es un protector de pantalla. La clase de prioridad inactivo se hereda mediante procesos secundarios.

128 (0x80)

Indica un proceso que realiza tareas de alta prioridad críticas en el tiempo. Los subprocesos de un proceso de clase de alta prioridad reemplazan a los de los procesos de clase de prioridad normal o de prioridad inactivo. Un ejemplo es la Lista de tareas, que debe responder rápidamente cuando lo llama el usuario, independientemente de la carga del sistema. Tenga mucho cuidado cuando use la clase de alta prioridad, ya que una aplicación enlazada a la CPU con una clase de alta prioridad puede usar casi todos los ciclos disponibles.

256 (0x100)

Indica un proceso que tiene la máxima prioridad posible. Los subprocesos de un proceso de clase de prioridad en tiempo real reemplazan a los de los restantes procesos, incluidos los procesos del sistema operativo que realizan tareas importantes. Por ejemplo, un proceso en tiempo real que se ejecute durante más de un breve intervalo puede hacer que las memorias caché del disco no se vacíen o que el mouse deje de responder.

RunInteractively

Tipo de datos: booleano

Tipo de acceso: solo lectura

Si el valor es True, el proceso se inicia en el servicio WinStation interactivo. Si el valor es false, el proceso se inicia en el servicio WinStation predeterminado. Esta propiedad invalida la propiedad DesktopName. Esta propiedad solo se usa localmente y exclusivamente si el usuario interactivo es el mismo usuario que configuró el consumidor.

A partir de Windows Vista, el proceso que ejecuta la instancia CommandLineEventConsumer se inicia en la cuenta LocalSystem y se encuentra en la sesión 0. Los servicios que se ejecutan en la sesión 0 no pueden interactuar con las sesiones de usuario.

ShowWindowCommand

Tipo de datos: uint32

Tipo de acceso: solo lectura

Estado mostrar ventana. Puede ser cualquiera de los valores que se pueden especificar en el parámetro nCmdShow para la función ShowWindow.

UseDefaultErrorMode

Tipo de datos: booleano

Tipo de acceso: solo lectura

Si el valor es True, se usa el modo de error predeterminado.

WindowTitle

Tipo de datos: cadena

Tipo de acceso: solo lectura

Título que aparece en la barra de título del proceso. Esta propiedad se omite en las aplicaciones de GUI.

WorkingDirectory

Tipo de datos: cadena

Tipo de acceso: solo lectura

Directorio de trabajo de este proceso.

XCoordinate

Tipo de datos: uint32

Tipo de acceso: solo lectura

Desplazamiento X, en píxeles, desde el borde izquierdo de la pantalla hasta el borde izquierdo de la ventana, si se crea una ventana.

XNumCharacters

Tipo de datos: uint32

Tipo de acceso: solo lectura

Ancho del búfer de pantalla, en columnas de caracteres, si se crea una ventana de consola. Esta propiedad se omite en los procesos de la interfaz de usuario gráfica.

XSize

Tipo de datos: uint32

Tipo de acceso: solo lectura

Ancho, en píxeles, de una ventana nueva, si se crea una ventana.

YCoordinate

Tipo de datos: uint32

Tipo de acceso: solo lectura

Desplazamiento X, en píxeles, desde el borde superior de la pantalla hasta el borde superior de la ventana, si se crea una ventana.

YNumCharacters

Tipo de datos: uint32

Tipo de acceso: solo lectura

Alto del búfer de pantalla, en filas de caracteres, si se crea una ventana de consola. Esta propiedad se omite en los procesos de la interfaz de usuario gráfica.

YSize

Tipo de datos: uint32

Tipo de acceso: solo lectura

Alto, en píxeles, de la ventana nueva, si se crea una ventana.

Comentarios

La clase CommandLineEventConsumer se deriva de la clase abstracta __EventConsumer.

La propiedad CreateSeparateWowVdm indica si el nuevo proceso se ejecuta o no en una máquina virtual de DOS privada (VDM). La ventaja de realizar la ejecución por separado es que un bloqueo solo finaliza la VDM individual. Los programas que se ejecutan en máquinas virtuales de DOS distintas siguen funcionando con normalidad y las aplicaciones Windows de 16 bits que se ejecutan en máquinas virtuales de DOS independientes tienen colas de entrada independientes, lo que significa que si una aplicación deja de responder momentáneamente, las aplicaciones que se encuentran en máquinas virtuales de DOS independientes siguen recibiendo datos de entrada. La desventaja de ejecutarse por separado es que se necesita mucho más memoria para hacerlo. Debe establecer esta propiedad en True solo si el usuario solicita que las aplicaciones Windows de 16 bits se ejecuten en su propia VDM.

Nota:

CommandLineEventConsumer usa internamente el método CreateProcess y pasa las propiedades ExecutablePath y CommandLineTemplate como parámetros lpApplicationName e lpCommandLine. El siguiente ejemplo de código de Managed Object Format (MOF) no usa CommandLineEventConsumer correctamente.

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

El método CreateProcess pasa lpCommandLine como argv[0], argv[1], etc. Dado que argv[0] para las aplicaciones de 16 bits se solía reservar para el nombre de archivo ejecutable, el código de MOF anterior provoca que el proceso se cree como si el siguiente comando se especificara en el símbolo del sistema: c:\windows\system32\cscript.exe param1 param2.

El resultado del comando anterior no es el esperado porque Cscript.exe no examina argv[0], por lo que no reconoce que no contiene su propio nombre, sino algo más ("c:\\scripts\\MyScript.js"). En el ejemplo siguiente se identifica el uso recomendado de CommandLineEventConsumer.

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

El uso anterior de CommandLineEventConsumer da como resultado el proceso creado como si se hubiera escrito el siguiente comando en el símbolo del sistema: c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2

Dado que "c:\\scripts\\MyScript.js" es ahora argv[1], lo ve Cscript.exe y el comando se realiza correctamente.

Para más información, consulte la función CreateProcess.

Ejemplos

Para obtener un ejemplo del uso de CommandLineEventConsumer para crear un consumidor, consulte Ejecución de un programa desde la línea de comandos basada en un evento.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista
Servidor mínimo compatible
Windows Server 2008
Espacio de nombres
Root\subscription
MOF
Wbemcons.mof
Archivo DLL
Wbemcons.dll

Consulte también

Clases de consumidor estándar

Supervisión y respuesta a eventos con consumidores estándar

Creación de un consumidor lógico

Recepción de eventos en todo momento

__EventConsumer