Classe CommandLineEventConsumer

A classe CommandLineEventConsumer inicia um processo arbitrário no sistema local quando um evento é entregue a ele. Essa classe é um dos consumidores de eventos padrão que o WMI fornece. Para obter mais informações, confira Monitoramento e resposta a eventos com consumidores padrão.

Observação

Ao usar a classe CommandLineEventConsumer, proteja o executável que deseja iniciar. Se o executável não estiver em um local seguro ou protegido por uma ACL (lista de controle de acesso) forte, um usuário não autorizado poderá substituir o executável por um executável mal-intencionado. Para obter mais informações sobre ACLs, visite a seção Segurança do SDK (Software Development Kit) do Microsoft Windows e consulte Criar um descritor de segurança para um novo objeto.

Sintaxe

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

Membros

A classe CommandLineEventConsumer tem estes tipos de membros:

Propriedades

A classe CommandLineEventConsumer tem estas propriedades.

CommandLineTemplate

Tipo de dados: string

Tipo de acesso: Somente leitura

Modelo de cadeia de caracteres padrão que especifica o processo a ser iniciado. Essa propriedade pode ser NULL e a propriedade ExecutablePath é usada como a linha de comando.

CreateNewConsole

Tipo de dados: booliano

Tipo de acesso: Somente leitura

Não usado. Se um valor for atribuído a essa propriedade, uma mensagem de rastreamento será gerada. Para obter mais informações, consulte Rastrear a atividade do WMI.

CreateNewProcessGroup

Tipo de dados: booliano

Tipo de acesso: Somente leitura

Se for True, o novo processo será o processo raiz de um novo grupo de processos. O grupo de processos inclui todos os processos descendentes desse processo raiz. O identificador de processo do novo grupo de processos é o mesmo que esse identificador de processo. Os grupos de processos são usados pelo método GenerateConsoleCtrlEvent para habilitar o envio de um sinal CTRL+C ou CTRL+BREAK para um grupo de processos de console.

CreateSeparateWowVdm

Tipo de dados: booliano

Tipo de acesso: Somente leitura

Se for True, o novo processo será executado em uma VDM (máquina DOS virtual) privada. Isso só é válido ao iniciar um aplicativo em execução em um sistema operacional Windows de 16 bits. Se definido como False, todos os aplicativos em execução em um sistema operacional Windows de 16 bits são executados como threads em uma única VDM compartilhada. Para obter mais informações, confira a seção Comentários deste tópico.

CreateSharedWowVdm

Tipo de dados: booliano

Tipo de acesso: Somente leitura

Se for True, o método CreateProcess executará o novo processo na VDM (máquina DOS virtual) compartilhada. Essa propriedade pode substituir a opção DefaultSeparateVDM na seção Windows do Win.ini se for definida como True. Para obter mais informações, confira a seção Comentários deste tópico.

CreatorSID

Tipo de dados: matriz uint8

Tipo de acesso: Somente leitura

SID (identificador de segurança) que identifica exclusivamente o usuário que cria um filtro. O WMI armazena o SID do usuário que cria uma instância de __EventConsumer ou o SID do Administrador, dependendo do sistema operacional. Para obter mais informações, confira Como associar um filtro de evento com um consumidor lógico e Como monitorar e responder a eventos com consumidores padrão.

Essa propriedade é herdada de __EventConsumer.

DesktopName

Tipo de dados: string

Tipo de acesso: Somente leitura

Não usado. Se um valor for atribuído a essa propriedade, uma mensagem de rastreamento será gerada. Para obter mais informações, consulte Rastrear a atividade do WMI.

ExecutablePath

Tipo de dados: string

Tipo de acesso: Somente leitura

Módulo a ser executado. A cadeia de caracteres pode especificar o caminho completo e o nome do arquivo do módulo a ser executado ou pode especificar um nome parcial. Se um nome parcial for especificado, a unidade e o diretório atuais serão assumidos.

A propriedade ExecutablePath pode ser NULL. Nesse caso, o nome do módulo deve ser o primeiro token delimitado por espaço em branco no valor da propriedade CommandLineTemplate. Se estiver usando um nome de arquivo longo que contenha um espaço, use cadeias de caracteres entre aspas para indicar onde o nome do arquivo termina e os argumentos começam, a fim de esclarecer o nome do arquivo.

Observação

Como a propriedade CommandLineTemplate pode ser um modelo em que o módulo a ser executado é fornecido por uma variável, uma propriedade ExecutablePathNULL permite que o módulo especificado no parâmetro seja executado e, em seguida, estará fora de seu controle. Sempre defina a propriedade ExecutablePath no registro CommandLineEventConsumer para incluir o executável necessário, evitando, assim, a substituição por parâmetros de eventos. Se você precisar usar um modelo e uma variável para especificar o módulo a ser executado, tenha cuidado com quem recebe privilégio completo de gravação no namespace.

FillAttribute

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Especifica o texto inicial e as cores da tela de fundo se uma nova janela de console for criada em um aplicativo de console

FillAttributes

Tipo de dados: uint32

Tipo de acesso: leitura/gravação

Texto inicial e cores da tela de fundo se uma nova janela de console for criada em um aplicativo de console Essa propriedade é ignorada em um aplicativo de GUI. O valor pode ser qualquer combinação dos seguintes valores:

1 (0x1)

primeiro plano azul

2 (0x2)

primeiro plano verde

4 (0x4)

primeiro plano vermelho

8 (0x8)

intensidade do primeiro plano

16 (0x10)

plano de fundo azul

32 (0x20)

plano de fundo verde

64 (0x40)

plano de fundo vermelho

128 (0x80)

intensidade do plano de fundo

Por exemplo, as combinações a seguir produzem texto vermelho em um plano de fundo branco.

0x4 | 0x40 | 0x20 | 0x10

ou

0x74

ForceOffFeedback

Tipo de dados: booliano

Tipo de acesso: Somente leitura

Se for True, a desabilitação do cursor de comentários será forçada enquanto o processo está sendo iniciado. O cursor normal é exibido.

ForceOnFeedback

Tipo de dados: booliano

Tipo de acesso: Somente leitura

Se for True, o cursor estará no modo de comentários por dois segundos após CreateProcess ser chamado. Durante esses dois segundos, se o processo fizer a primeira chamada à GUI, o sistema dará mais cinco segundos ao processo. Durante esses cinco segundos, se o processo mostrar uma janela, o sistema dará mais cinco segundos ao processo para concluir o desenho da janela.

KillTimeout

Tipo de dados: uint32

Tipo de acesso: Somente leitura

O número, em segundos, que o serviço do WMI aguarda antes de encerrar um processo 0 (zero) indica que um processo não deve ser encerrado. Encerrar um processo impede que um processo seja executado indefinidamente.

MachineName

Tipo de dados: string

Tipo de acesso: Somente leitura

Nome do computador para o qual o WMI (Instrumentação de Gerenciamento do Windows) envia eventos.

Essa propriedade é herdada de __EventConsumer.

MaximumQueueSize

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Fila máxima para um consumidor específico, em bytes.

Essa propriedade é herdada de __EventConsumer.

Nome

Tipo de dados: string

Tipo de acesso: Somente leitura

Qualificadores: key

Nome exclusivo de um consumidor.

Prioridade

Tipo de dados: sint32

Tipo de acesso: Somente leitura

Nível de prioridade de agendamento dos threads de processo. A lista a seguir lista os níveis de prioridade disponíveis.

32 (0x20)

Indica um processo normal sem as necessidades de agendamento.

64 (0x40)

Indica um processo cujos threads são executados somente quando o sistema está ocioso, sendo precedidos pelos threads de qualquer processo em execução em uma classe de prioridade mais alta. Um exemplo é uma proteção de tela. A classe de prioridade ociosa é herdada por processos filho.

128 (0x80)

Indica um processo que executa tarefas críticas de alta prioridade e tempo. Os threads de um processo de classe de alta prioridade interrompem os threads de processos de classe de prioridade normal ou de prioridade ociosa. Um exemplo é a Lista de Tarefas, que deve responder rapidamente quando chamada pelo usuário, independentemente da carga no sistema. Tome cuidados extremos ao usar a classe de alta prioridade, pois um aplicativo associado à CPU com uma classe de alta prioridade pode usar quase todos os ciclos disponíveis.

256 (0x100)

Indica um processo que tem a prioridade mais alta possível. Os threads de um processo de classe de prioridade em tempo real interrompem os threads de todos os outros processos, incluindo processos do sistema operacional que realizam tarefas importantes. Por exemplo, um processo em tempo real que é executado por mais de um intervalo muito breve pode fazer com que os caches de disco não sejam liberados ou fazer com que o mouse pare de responder.

RunInteractively

Tipo de dados: booliano

Tipo de acesso: Somente leitura

Se for True, o processo será iniciado no WinStation interativo. Se for False, o processo será iniciado no WinStation de serviço padrão. Essa propriedade substitui a propriedade DesktopName. Essa propriedade só é usada localmente e somente se o usuário interativo for o mesmo usuário que configurou o consumidor.

A partir do Windows Vista, o processo que executa a instância CommandLineEventConsumer é iniciado na conta LocalSystem e está na sessão 0. Os serviços executados na sessão 0 não podem interagir com sessões de usuário.

ShowWindowCommand

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Estado de exibição de janela. Qualquer um dos valores que podem ser especificados no parâmetro nCmdShow para a função ShowWindow.

UseDefaultErrorMode

Tipo de dados: booliano

Tipo de acesso: Somente leitura

Se for True, o modo de erro padrão será usado.

WindowTitle

Tipo de dados: string

Tipo de acesso: Somente leitura

Título que aparece na barra de título do processo. Essa propriedade é ignorada para aplicativos de GUI.

WorkingDirectory

Tipo de dados: string

Tipo de acesso: Somente leitura

Diretório de trabalho para esse processo.

XCoordinate

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Deslocamento X, em pixels, da borda esquerda da tela até a borda esquerda da janela, se uma nova janela for criada.

XNumCharacters

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Largura do buffer de tela, em colunas de caracteres, se uma nova janela de console for criada. Essa propriedade é ignorada em um processo de GUI.

XSize

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Largura, em pixels, de uma nova janela, se uma nova janela for criada.

YCoordinate

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Deslocamento Y, em pixels, da borda superior da tela até a borda superior da janela, se uma nova janela for criada.

YNumCharacters

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Altura do buffer de tela, em linhas de caracteres, se uma nova janela de console for criada. Essa propriedade é ignorada em um processo de GUI.

YSize

Tipo de dados: uint32

Tipo de acesso: Somente leitura

Altura, em pixels, da nova janela, se uma nova janela for criada.

Comentários

A classe CommandLineEventConsumer é derivada da classe abstrata __EventConsumer.

A propriedade CreateSeparateWowVdm indica se o novo processo é executado ou não em uma VDM (Máquina DOS Virtual) privada. A vantagem de executar separadamente é que uma falha encerra apenas a VDM única. Os programas em execução em VDMs distintas continuam funcionando normalmente e os aplicativos baseados no Windows de 16 bits em execução em VDMs separadas têm filas de entrada separadas. Isso significa que, se um aplicativo parar de responder momentaneamente, os aplicativos em VDMs separadas continuarão a receber entrada. A desvantagem de executar separadamente é que isso requer muito mais memória. Você deve definir essa propriedade como True somente se o usuário solicitar que aplicativos baseados no Windows de 16 bits sejam executados em sua própria VDM.

Observação

O CommandLineEventConsumer usa o método CreateProcess internamente e passa as propriedades ExecutablePath e CommandLineTemplate como os parâmetros lpApplicationName e lpCommandLine. O exemplo de código MOF (Managed Object Format) a seguir não usa CommandLineEventConsumer corretamente.

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

O método CreateProcess passa lpCommandLine como argv[0], argv[1] e assim por diante. Como argv[0] para aplicativos de 16 bits costumava ser reservado para o nome do arquivo executável, o código MOF anterior resulta na criação do processo como se o seguinte comando fosse inserido no prompt de comando: c:\windows\system32\cscript.exe param1 param2.

O comando anterior não tem êxito porque Cscript.exe não olha para argv[0] e, portanto, não reconhece que não contém seu próprio nome, mas outra coisa ("c:\\scripts\\MyScript.js"). O exemplo a seguir identifica o 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";
};

O uso anterior de CommandLineEventConsumer resulta no processo criado como se o seguinte comando fosse inserido no prompt de comando: c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2

Como "c:\\scripts\\MyScript.js" agora é argv[1], ele é visto por Cscript.exe e o comando é bem-sucedido.

Para obter mais informações, consulte a função CreateProcess.

Exemplos

Para obter um exemplo de como usar CommandLineEventConsumer para criar um consumidor, consulte Executar um programa na linha de comando com base em um evento.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista
Servidor mínimo com suporte
Windows Server 2008
Namespace
Root\subscription
MOF
Wbemcons.mof
DLL
Wbemcons.dll

Confira também

Classes de consumidor padrão

Monitorar e responder a eventos com consumidores padrão

Criar um consumidor lógico

Como receber eventos o tempo todo

__EventConsumer