Classe CommandLineEventConsumer

La classe CommandLineEventConsumer avvia un processo arbitrario nel sistema locale quando viene recapitato un evento. Questa classe è uno dei consumer di eventi standard forniti da WMI. Per altre informazioni, vedere Monitoraggio e risposta agli eventi con consumer standard.

Nota

Quando si usa la classe CommandLineEventConsumer , proteggere l'eseguibile che si vuole avviare. Se l'eseguibile non si trova in un percorso sicuro o protetto con un elenco di controllo di accesso sicuro (ACL), un utente non autorizzato può sostituire il file eseguibile con un eseguibile dannoso. Per altre informazioni sugli elenchi di controllo di accesso, visitare la sezione Sicurezza di Microsoft Windows Software Development Kit (SDK) e vedere Creazione di un descrittore di sicurezza per un nuovo oggetto.

Sintassi

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

Members

La classe CommandLineEventConsumer include questi tipi di membri:

Proprietà

La classe CommandLineEventConsumer ha queste proprietà.

CommandLineTemplate

Tipo di dati: stringa

Tipo di accesso: sola lettura

Modello stringa standard che specifica il processo da avviare. Questa proprietà può essere NULL e la proprietà EseguibilPath viene usata come riga di comando.

CreateNewConsole

Tipo di dati: booleano

Tipo di accesso: sola lettura

Non usato. Se viene assegnato un valore a questa proprietà, viene generato un messaggio di traccia. Per altre informazioni, vedere Traccia attività WMI.

CreateNewProcessGroup

Tipo di dati: booleano

Tipo di accesso: sola lettura

Se True, il nuovo processo è il processo radice di un nuovo gruppo di processi. Il gruppo di processi include tutti i processi discendenti di questo processo radice. L'identificatore del processo del nuovo gruppo di processi è lo stesso di questo identificatore di processo. I gruppi di processi vengono usati dal metodo GenerateConsoleCtrlEvent per abilitare l'invio di un segnale CTRL+C o CTRL+BREAK a un gruppo di processi della console.

CreateSeparateWowVdm

Tipo di dati: booleano

Tipo di accesso: sola lettura

Se True, il nuovo processo viene eseguito in una macchina virtuale privata (VDM). Questa operazione è valida solo quando si avvia un'applicazione in esecuzione in un sistema operativo Windows a 16 bit. Se impostato su False, tutte le applicazioni in esecuzione in un sistema operativo Windows a 16 bit vengono eseguite come thread in un singolo VDM condiviso. Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

CreateSharedWowVdm

Tipo di dati: booleano

Tipo di accesso: sola lettura

Se True, il metodo CreateProcess esegue il nuovo processo nella macchina virtuale condivisa (VDM). Questa proprietà può eseguire l'override dell'opzione DefaultSeparateVDM nella sezione Windows di Win.ini se impostata su True. Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

CreatorSID

Tipo di dati: matrice uint8

Tipo di accesso: sola lettura

Identificatore di sicurezza (SID) che identifica in modo univoco l'utente che crea un filtro. WMI archivia il SID dell'utente che crea un'istanza di __EventConsumer o il SID amministratore, a seconda del sistema operativo. Per altre informazioni, vedere Associazione di un filtro eventi con un consumer logico e monitoraggio e risposta agli eventi con consumer standard.

Questa proprietà viene ereditata da __EventConsumer.

DesktopName

Tipo di dati: stringa

Tipo di accesso: sola lettura

Non usato. Se viene assegnato un valore a questa proprietà viene generato un messaggio di traccia. Per altre informazioni, vedere Traccia attività WMI.

ExecutablePath

Tipo di dati: stringa

Tipo di accesso: sola lettura

Modulo da eseguire. La stringa può specificare il percorso completo e il nome del file del modulo da eseguire oppure può specificare un nome parziale. Se viene specificato un nome parziale, si presuppone che l'unità corrente e la directory corrente.

La proprietà EseguibilPath può essere NULL. In tal caso, il nome del modulo deve essere il primo token delimitato da spazi vuoti nel valore della proprietà CommandLineTemplate . Se si usa un nome file lungo contenente uno spazio, usare stringhe con virgolette per indicare dove termina il nome del file e gli argomenti iniziano a chiarire il nome del file.

Nota

Poiché la proprietà CommandLineTemplate può essere un modello in cui il modulo da eseguire viene fornito da una variabile, una proprietà eseguibileNULL consente al modulo specificato nel parametro di eseguire e quindi è fuori dal controllo. Impostare sempre la proprietà EseguibilPath nella registrazione CommandLineEventConsumer per includere il file eseguibile richiesto, che evita la sovrascrittura in base ai parametri degli eventi. Se è necessario usare un modello e una variabile per specificare il modulo da eseguire, prestare attenzione a chi ha concesso privilegi di scrittura completi nello spazio dei nomi.

FillAttribute

Tipo di dati: uint32

Tipo di accesso: sola lettura

Specifica i colori iniziali di testo e sfondo se viene creata una nuova finestra della console in un'applicazione console

FillAttributes

Tipo di dati: uint32

Tipo di accesso: Lettura/scrittura

Testo iniziale e colori di sfondo, se viene creata una nuova finestra della console in un'applicazione console. Questa proprietà viene ignorata in un'applicazione GUI. Il valore può essere qualsiasi combinazione dei valori seguenti.

1 (0x1)

primo piano blu

2 (0x2)

primo piano verde

4 (0x4)

primo piano rosso

8 (0x8)

intensità in primo piano

16 (0x10)

sfondo blu

32 (0x20)

sfondo verde

64 (0x40)

sfondo rosso

128 (0x80)

intensità di sfondo

Ad esempio, le combinazioni seguenti producono testo rosso in uno sfondo bianco:

0x4 | 0x40 | 0x20 | 0x10

oppure

0x74

ForceOffFeedback

Tipo di dati: booleano

Tipo di accesso: sola lettura

Se True, il cursore di feedback viene disattivato durante l'avvio del processo. Viene visualizzato il cursore normale.

ForceOnFeedback

Tipo di dati: booleano

Tipo di accesso: sola lettura

Se True, il cursore è in modalità feedback per due secondi dopo la chiamata a CreateProcess . Durante questi due secondi, se il processo effettua la prima chiamata dell'interfaccia utente grafica, il sistema fornisce altri cinque secondi al processo. Durante questi cinque secondi, se il processo mostra una finestra, il sistema fornisce altri cinque secondi al processo per completare il disegno della finestra.

KillTimeout

Tipo di dati: uint32

Tipo di accesso: sola lettura

Numero, in secondi, che il servizio WMI attende prima di uccidere un processo 0 (zero) indica che un processo non deve essere terminato. L'eliminazione di un processo impedisce l'esecuzione illimitata di un processo.

MachineName

Tipo di dati: string

Tipo di accesso: sola lettura

Nome del computer a cui Strumentazione gestione Windows (WMI) invia gli eventi.

Questa proprietà viene ereditata da __EventConsumer.

MaximumQueueSize

Tipo di dati: uint32

Tipo di accesso: sola lettura

Coda massima per un consumer specifico, in byte.

Questa proprietà viene ereditata da __EventConsumer.

Nome

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: chiave

Nome univoco di un consumer.

Priorità

Tipo di dati: sint32

Tipo di accesso: sola lettura

Livello di priorità di pianificazione dei thread di processo. Nell'elenco seguente sono elencati i livelli di priorità disponibili.

32 (0x20)

Indica un processo normale senza esigenze di pianificazione.

64 (0x40)

Indica un processo i cui thread vengono eseguiti solo quando il sistema è inattiva e vengono preceduti dai thread di qualsiasi processo in esecuzione in una classe con priorità più alta. Un esempio è uno screen saver. La classe di priorità inattiva viene ereditata dai processi figlio.

128 (0x80)

Indica un processo che esegue attività con priorità elevata e tempo critiche. I thread di un processo di classe ad alta priorità annullano i thread dei processi di classe con priorità normale o con priorità inattiva. Un esempio è l'elenco attività, che deve rispondere rapidamente quando viene chiamato dall'utente indipendentemente dal carico nel sistema. Usare l'estrema attenzione quando si usa la classe ad alta priorità, perché un'applicazione associata alla CPU con una classe con priorità alta può usare quasi tutti i cicli disponibili.

256 (0x100)

Indica un processo con la priorità più alta possibile. I thread di un processo di classe di priorità in tempo reale annullano i thread di tutti gli altri processi, inclusi i processi del sistema operativo che eseguono attività importanti. Ad esempio, un processo in tempo reale eseguito per più di un breve intervallo può causare la mancata scaricamento delle cache del disco o la mancata risposta del mouse.

RunInteractively

Tipo di dati: booleano

Tipo di accesso: sola lettura

Se True, il processo viene avviato in WinStation interattivo. Se False, il processo viene avviato nel servizio predefinito WinStation. Questa proprietà esegue l'override della proprietà DesktopName . Questa proprietà viene usata solo in locale e solo se l'utente interattivo è lo stesso utente che ha configurato il consumer.

A partire da Windows Vista, il processo che esegue l'istanza CommandLineEventConsumer viene avviato con l'account LocalSystem e si trova nella sessione 0. I servizi eseguiti nella sessione 0 non possono interagire con le sessioni utente.

ShowWindowCommand

Tipo di dati: uint32

Tipo di accesso: sola lettura

Lo stato della finestra è visualizzato. Può essere uno qualsiasi dei valori che è possibile specificare nel parametro nCmdShow per la funzione ShowWindow .

UseDefaultErrorMode

Tipo di dati: booleano

Tipo di accesso: sola lettura

Se True, viene utilizzata la modalità di errore predefinita.

Windowtitle

Tipo di dati: string

Tipo di accesso: sola lettura

Titolo visualizzato sulla barra del titolo del processo. Questa proprietà viene ignorata per le applicazioni GUI.

WorkingDirectory

Tipo di dati: string

Tipo di accesso: sola lettura

Directory di lavoro per questo processo.

XCoordinate

Tipo di dati: uint32

Tipo di accesso: sola lettura

Offset X, in pixel, dal bordo sinistro dello schermo al bordo sinistro della finestra, se viene creata una nuova finestra.

XNumCharacters

Tipo di dati: uint32

Tipo di accesso: sola lettura

Larghezza buffer dello schermo, in colonne di caratteri, se viene creata una nuova finestra della console. Questa proprietà viene ignorata in un processo GUI.

XSize

Tipo di dati: uint32

Tipo di accesso: sola lettura

Larghezza, in pixel, di una nuova finestra, se viene creata una nuova finestra.

YCoordinate

Tipo di dati: uint32

Tipo di accesso: sola lettura

Offset Y, in pixel, dal bordo superiore dello schermo al bordo superiore della finestra, se viene creata una nuova finestra.

YNumCharacters

Tipo di dati: uint32

Tipo di accesso: sola lettura

Altezza del buffer dello schermo, in righe di caratteri, se viene creata una nuova finestra della console. Questa proprietà viene ignorata in un processo GUI.

YSize

Tipo di dati: uint32

Tipo di accesso: sola lettura

Altezza, in pixel, della nuova finestra, se viene creata una nuova finestra.

Commenti

La classe CommandLineEventConsumer deriva dalla classe astratta __EventConsumer .

La proprietà CreateSeparateWowVdm indica se il nuovo processo viene eseguito in una macchina virtuale privata (VDM). Il vantaggio di eseguire separatamente è che un arresto anomalo termina solo il singolo VDM. I programmi in esecuzione in macchine virtuali distinte continuano a funzionare normalmente e le applicazioni basate su Windows a 16 bit in esecuzione in macchine virtuali separate hanno code di input separate. Ciò significa che se un'applicazione smette di rispondere momentaneamente, le applicazioni in macchine virtuali separate continuano a ricevere input. Lo svantaggio dell'esecuzione separata consiste nel fatto che richiede molto più memoria per farlo. È consigliabile impostare questa proprietà su True solo se l'utente richiede che le applicazioni basate su Windows a 16 bit vengano eseguite nel proprio VDM.

Nota

CommandLineEventConsumer usa internamente il metodo CreateProcess e passa le proprietà ExecutablePath e CommandLineTemplate come parametri lpApplicationName e lpCommandLine. L'esempio di codice MOF (Managed Object Format) seguente non usa correttamente CommandLineEventConsumer .

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

Il metodo CreateProcess passa lpCommandLine come argv[0], argv[1]e così via. Poiché argv[0] per le applicazioni a 16 bit usate per essere riservate per il nome del file eseguibile, il codice MOF precedente comporta la creazione del processo come se il comando seguente venga immesso al prompt dei comandi: c:\windows\system32\cscript.exe param1 param2.

Il comando precedente non riesce perché Cscript.exe non esamina argv[0]e quindi non riconosce che non contiene il proprio nome, ma qualcos'altro ("c:\\scripts\\MyScript.js"). Nell'esempio seguente viene identificato l'uso consigliato di CommandLineEventConsumer.

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

L'uso precedente di CommandLineEventConsumer comporta la creazione del processo come se fosse stato immesso il comando seguente al prompt dei comandi: c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2

Poiché "c:\\scripts\\MyScript.js" è ora argv[1], viene visualizzato da Cscript.exe e il comando ha esito positivo.

Per altre informazioni, vedere la funzione CreateProcess .

Esempio

Per un esempio di utilizzo di CommandLineEventConsumer per creare un consumer, vedere Esecuzione di un programma dalla riga di comando in base a un evento.

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista
Server minimo supportato
Windows Server 2008
Spazio dei nomi
Root\subscription
MOF
Wbemcons.mof
DLL
Wbemcons.dll

Vedi anche

Classi consumer standard

Monitoraggio e risposta agli eventi con consumer standard

Creazione di un consumer logico

Ricezione di eventi in qualsiasi momento

__EventConsumer