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