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