Metodo Change della classe Win32_Service (Mbnapi.h) - TerminalService
Il metodo della classe ChangeWMI modifica un Win32_TerminalService.
Questo argomento usa la sintassi MOF (Managed Object Format). Per altre informazioni sull'uso di questo metodo, vedere Chiamata di un metodo.
Sintassi
uint32 Change(
[in] string DisplayName,
[in] string PathName,
[in] uint32 ServiceType,
[in] uint32 ErrorControl,
[in] string StartMode,
[in] boolean DesktopInteract,
[in] string StartName,
[in] string StartPassword,
[in] string LoadOrderGroup,
[in] string LoadOrderGroupDependencies,
[in] string ServiceDependencies
);
Parametri
-
DisplayName [in]
-
Nome visualizzato del servizio. La lunghezza massima della stringa è di 256 caratteri. Il nome viene mantenuto in caso di maiuscole e minuscole nella gestione controllo del servizio. I confronti di DisplayName sono sempre senza distinzione tra maiuscole e minuscole.
Vincoli: accetta lo stesso valore della proprietà Name .
Esempio, "Atdisk".
-
PathName [in]
-
Percorso completo del file eseguibile che implementa il servizio, ad esempio "\SystemRoot\System32\drivers\afd.sys".
-
ServiceType [in]
-
Tipo di servizi forniti ai processi che li chiamano.
-
1 (0x1)
-
Kernel Driver
-
2 (0x2)
-
File System Driver
-
4 (0x4)
-
Adattatore
-
8 (0x8)
-
Driver di riconoscimento
-
16 (0x10)
-
Processo personalizzato
-
32 (0x20)
-
Processo di condivisione
-
256 (0x100)
-
Processo interattivo
ErrorControl [in]
Gravità dell'errore se questo servizio non viene avviato durante l'avvio. Il valore indica l'azione eseguita dal programma di avvio se si verifica un errore. Tutti gli errori vengono registrati dal sistema.
0
Ignore. L'avvio continua. Non viene inviata alcuna notifica all'utente che il servizio non è riuscito.
1
Normale. L'avvio continua. Prima dell'accesso dell'utente, l'utente riceve la notifica"Almeno un servizio o un dispositivo non riuscito durante l'avvio".
2
Severa. Il computer tenta di riavviare con la configurazione valida nota. Se il servizio ha esito negativo, l'avvio continua e viene inviata una notifica all'utente.
3
Critica. Il computer tenta di riavviare con la configurazione valida nota. Se il servizio ha esito negativo, l'avvio si arresta.
StartMode [in]
Modalità di avvio del servizio di base di Windows. Per altre informazioni, vedere la sezione Osservazioni.
Avvio
Driver del dispositivo avviato dal caricatore del sistema operativo.
Sistema
Driver del dispositivo avviato dal processo di inizializzazione del sistema operativo. Questo valore è valido solo per i servizi del driver.
Automatico
Il servizio viene avviato automaticamente dal gestore del controllo del servizio durante l'avvio del sistema. I servizi di avvio automatico iniziano prima dell'accesso di un utente al computer ed eseguono anche se non viene eseguito alcun accesso utente al computer.
Manuale
Servizio da avviare dal gestore di controllo del servizio quando un processo chiama il metodo StartService . Anche se i servizi manuali devono essere avviati in modo specifico da un utente (o da uno script), continuano a essere eseguiti anche se l'utente si disconnette. I servizi manuali vengono spesso definiti servizi su richiesta.
Disabili
Servizio che non può più essere avviato. Per avviare un servizio disabilitato, è prima necessario modificare l'opzione di avvio in Auto o Manuale.
DesktopInteract [in]
Se True, il servizio può creare o comunicare con una finestra sul desktop.
StartName [in]
Nome dell'account in cui viene eseguito il servizio. A seconda del tipo di servizio, il nome dell'account può essere sotto forma di DomainName\Username o .\Username. Il processo di servizio verrà registrato usando uno di questi due moduli durante l'esecuzione. Se l'account appartiene al dominio predefinito, è possibile specificare .\Username. Se viene specificato NULL , il servizio verrà eseguito come account LocalSystem. Per i driver a livello di kernel o di sistema, StartName contiene il nome dell'oggetto driver , ovvero \FileSystem\Rdr o \Driver\Xns) usato dal sistema di input e output (I/O) per caricare il driver di dispositivo. Se viene specificato NULL, il driver viene eseguito con un nome di oggetto predefinito creato dal sistema di I/O in base al nome del servizio, ad esempio "DWDOM\Amministrazione".
È anche possibile usare il formato Nome entità utente (UPN) per specificare startName, ad esempio Username@DomainName.
StartPassword [in]
Password per il nome dell'account specificato dal parametro StartName . Specificare NULL se la password non viene modificata. Specificare una stringa vuota se il servizio non dispone di password.
Nota
Quando si modifica un servizio da un sistema locale a una rete o da una rete a un sistema locale, StartPassword deve essere una stringa vuota ("") e non NULL.
LoadOrderGroup [in]
Nome del gruppo associato. I gruppi di ordini di carico sono contenuti nel Registro di sistema e determinano la sequenza in cui i servizi vengono caricati nel sistema operativo. Se il puntatore è NULL o se punta a una stringa vuota, il servizio non appartiene a un gruppo. Per altre informazioni, vedere la sezione Osservazioni.
Le dipendenze tra i gruppi devono essere elencate nel parametro LoadOrderGroupDependencies . I servizi nell'elenco di gruppi di ordinamento del carico vengono avviati prima, seguiti dai servizi nei gruppi non nell'elenco dei gruppi di ordinamento del carico, seguiti dai servizi che non appartengono a un gruppo. Il Registro di sistema include un elenco di gruppi di ordinamento di carico disponibili in:
HKEY_LOCAL_MACHINE\Sistema\Currentcontrolset\Controllo\ServiceGroupOrder
LoadOrderGroupDependencies [in]
Elenco dei gruppi di ordinamento del carico che devono iniziare prima dell'avvio del servizio. La matrice è terminata con valore null doubly. Se il puntatore è NULL o se punta a una stringa vuota, il servizio non ha dipendenze. I nomi di gruppo devono essere preceduti dal carattere SC_GROUP_IDENTIFIER (definito nel file Winsvc.h) per differenziarli dai nomi dei servizi perché i servizi e i gruppi di servizi condividono lo stesso spazio dei nomi. La dipendenza da un gruppo significa che questo servizio può essere eseguito se almeno un membro del gruppo è in esecuzione dopo un tentativo di avviare tutti i membri del gruppo.
ServiceDependencies [in]
Elenco contenente i nomi dei servizi che devono iniziare prima dell'avvio del servizio. La matrice è terminata in modo doubly NULL. Se il puntatore è NULL o se punta a una stringa vuota, il servizio non ha dipendenze. La dipendenza da un servizio indica che questo servizio può essere eseguito solo se il servizio dipende dall'esecuzione.
Valore restituito
Restituisce uno dei valori elencati nell'elenco seguente o qualsiasi altro valore per indicare un errore. Per altri codici di errore, vedere Costanti di errore WMI o WbemErrorEnum. Per i valori HRESULT generali, vedere Codici di errore di sistema.
-
0
-
La richiesta è stata accettata.
-
1
-
La richiesta non è supportata.
-
2
-
L'utente non ha avuto l'accesso necessario.
-
3
-
Impossibile arrestare il servizio perché altri servizi in esecuzione dipendono dal servizio.
-
4
-
Il codice di controllo richiesto non è valido o non è accettabile per il servizio.
-
5
-
Impossibile inviare il codice di controllo richiesto al servizio perché lo stato del servizio (Win32_BaseService. Proprietà state ) è uguale a 0, 1 o 2.
-
6
-
Il servizio non è stato avviato.
-
7
-
Il servizio non ha risposto in tempo utile alla richiesta di avvio.
-
8
-
Errore sconosciuto durante l'avvio del servizio.
-
9
-
Non è stato trovato il percorso della directory del file eseguibile del servizio.
-
10
-
Il servizio è già in esecuzione.
-
11
-
Il database a cui aggiungere il nuovo servizio è bloccato.
-
12
-
Una dipendenza da questo servizio si basa su è stata rimossa dal sistema.
-
13
-
Impossibile trovare un servizio dipendente necessario.
-
14
-
Il servizio è stato disabilitato dal sistema.
-
15
-
Il servizio non dispone delle credenziali di autenticazione corrette per l'esecuzione nel sistema.
-
16
-
Questo servizio viene rimosso dal sistema.
-
17
-
Il servizio non ha alcun thread di esecuzione.
-
18
-
Il servizio ha dipendenze circolari all'avvio.
-
19
-
Un servizio è in esecuzione con lo stesso nome.
-
20
-
Il nome del servizio ha caratteri non validi.
-
21
-
I parametri non validi sono stati passati al servizio.
-
22
-
L'account in cui viene eseguito questo servizio non è valido o non dispone delle autorizzazioni per l'esecuzione del servizio.
-
23
-
Il servizio esiste già nel database dei servizi disponibili dal sistema.
-
24
-
Il servizio è attualmente sospeso nel sistema.
Commenti
All'avvio di un computer, vengono avviati anche tutti i servizi di avvio automatico. In occasione, uno di questi servizi potrebbe non riuscire a iniziare insieme al computer. Quando un servizio ha esito negativo durante l'avvio del sistema, il computer esegue l'azione in base al valore del codice di controllo degli errori del servizio.
la maggior parte dei servizi viene installata usando il codice di controllo degli errori normale. Alcune eccezioni, installate usando il codice di errore Ignora, includono:
- Servizio Replica file
- Smart card
- Accesso secondario
- WMI
Per i servizi installati usando il codice di errore Ignora, non viene inviata alcuna notifica all'utente che il servizio non è riuscito. Se si preferisce che non sia stato possibile avviare un servizio, è possibile usare WMI per modificare il codice di controllo degli errori. I codici di controllo degli errori si applicano solo all'avvio del computer; i codici di controllo degli errori non vengono usati se si arresta e quindi si tenta di riavviare un servizio dopo l'esecuzione del computer.
In occasione, potrebbe essere necessario modificare l'account in cui viene eseguito un determinato servizio. Ad esempio, è possibile eseguire un servizio in un account amministrativo. Poiché ciò può creare una vulnerabilità di sicurezza, è possibile passare al servizio in un account con un minor numero di privilegi. In alternativa, potrebbe essere necessario disporre di servizi in esecuzione in un account che sta per essere eliminato oppure è possibile assicurarsi che, in tutti i server, alcuni servizi vengano eseguiti in determinati account. È possibile usare il metodo Change della classe Win32_TerminalService per configurare i servizi da eseguire in un account utente specificato. Quando si seleziona un account, tenere presente quanto segue:
L'account usato come account del servizio deve avere il diritto di accedere come servizio. Questo diritto può essere concesso usando Criteri di gruppo.
L'account usato come account di servizio non deve essere membro di un gruppo locale, di dominio o di amministratori aziendali.
Ogni istanza di un servizio deve essere eseguita con un account utente univoco. In questo modo è disponibile una sicurezza aggiuntiva e consente il controllo delle singole istanze del servizio.
Se il servizio è interattivo, il servizio deve essere eseguito nell'account LocalSystem.
LocalSystem è obbligatorio perché è possibile visualizzare e interattivo solo una stazione finestra (WinSta0) alla volta. Se un servizio viene eseguito in un account diverso da LocalSystem, viene eseguito nella stazione finestra di service-0x03e7$\Default, ovvero una finestra invisibile. I servizi in esecuzione in questa stazione finestra non possono ricevere input o visualizzare l'output.
Quando si assegna un account a un servizio, SCM richiede la password corretta per tale account prima di effettuare l'assegnazione. Se si specifica una password non corretta, SCM rifiuta l'account. Se si configura un account del servizio usando l'account LocalSystem, LocalService o NetworkService, non è necessario specificare una password dell'account perché questi account non dispongono di password.
SCM archivia la password dell'account nel database dei servizi. Dopo aver assegnato la password, tuttavia, SCM non garantisce che la password archiviata nel database dei servizi e la password assegnata all'account utente in Active Directory continui a corrispondere. Di conseguenza, una situazione simile alla seguente potrebbe verificarsi:
- . Si configura un servizio da eseguire in un determinato account utente.
- Il servizio viene avviato in tale account usando la password dell'account corrente.
- Si modifica la password per l'account utente.
- Il servizio continua a essere eseguito. Tuttavia, se il servizio si arresta, non è possibile riavviarlo perché SCM continua a usare la password precedente e non valida. La modifica della password in Active Directory non modifica la password archiviata nel database dei servizi.
Se si eseguono servizi in account utente regolari, è necessario aggiornare le password del servizio ogni volta che la password dell'account utente cambia. Ciò può richiedere particolarmente tempo se non si è certi che i servizi in esecuzione in tale account o quali computer dispongano di servizi in esecuzione in tale account. Fortunatamente, è possibile usare WMI per controllare gli account del servizio in tutti i computer e, se necessario, modificare la password dell'account del servizio.
Il parametro Win32_LoadOrderGroup rappresenta un gruppo di servizi di sistema che definiscono le dipendenze di esecuzione. I servizi devono essere avviati nell'ordine specificato dal gruppo di ordini di carico perché i servizi dipendono l'uno dall'altro. Questi servizi dipendenti richiedono la presenza dei servizi precedenti per funzionare correttamente.
Per modificare un servizio da un servizio di rete a un sistema locale, i parametri StartName e StartPassword devono avere i valori seguenti:
StartName = "LocalSystem"
StartPassword = "" // - empty string, not NULL
Per modificare un servizio da un servizio di sistema locale a una rete i parametri StartName e StartPassword devono avere i valori seguenti:
StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL
Esempio
Il vbScript seguente modifica l'account del servizio per i servizi da eseguire in un account utente specificato in LocalSystem.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objService in colServices
errServiceChange = objService.Change _
( , , , , , , ".\LocalSystem" , "")
Next
Il codice VBScript seguente modifica la password dell'account del servizio per tutti gli script in esecuzione in Netsvc
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objservice in colServiceList
errReturn = objService.Change( , , , , , , , "password")
Next
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows Vista |
Server minimo supportato |
Windows Server 2008 |
Spazio dei nomi |
Root\CIMv2\TerminalServices |
Intestazione |
|
MOF |
|
DLL |
|