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