Share via


Metodo Change della classe Win32_Service (Mbnapi.h)

Il metodo ChangeWMI class modifica un Win32_Service.

In questo argomento viene utilizzata 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 nel gestore dei controlli del servizio. I confronti di DisplayName non fanno sempre distinzione tra maiuscole e minuscole.

Vincoli: accetta lo stesso valore della proprietà Name .

Ad 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)

Recognizer Driver

16 (0x10)

Processo personale

32 (0x20)

Processo di condivisione

256 (0x100)

Processo interattivo

ErrorControl [in]

Gravità dell'errore se il servizio non viene avviato durante l'avvio. Il valore indica l'azione eseguita dal programma di avvio in caso di errore. Tutti gli errori vengono registrati dal sistema.

Ignora (0)

L'utente non viene notificato.

Normale (1)

Normale. L'utente viene notificato.

Grave (2)

Il sistema viene riavviato con l'ultima configurazione valida.

Critico (3)

Il sistema tenta un riavvio con una configurazione valida.

StartMode [in]

Modalità di avvio del servizio di base di Windows. Per altre informazioni, vedere la sezione Osservazioni.

Avvio

Driver di dispositivo avviato dal caricatore del sistema operativo. Questo valore è valido solo per i servizi del driver.

Sistema

Driver di dispositivo avviato dal processo di inizializzazione del sistema operativo. Questo valore è valido solo per i servizi del driver.

Automatico

Servizio da avviare automaticamente da Service Control Manager durante l'avvio del sistema.

Manuale

Servizio da avviare da Service Control Manager quando un processo chiama il metodo StartService .

Disabled

Servizio che non può più essere avviato.

DesktopInteract [in]

Se True, il servizio può creare o comunicare con una finestra sul desktop.

StartName [in]

Nome account in cui viene eseguito il servizio. A seconda del tipo di servizio, il nome dell'account può essere nel formato DomainName\Username o .\Username. Il processo del 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à connesso come account LocalSystem. Per i driver a livello di sistema o kernel, 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 dell'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 non si modifica la password. 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 a cui è 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 dei gruppi di ordinamento del carico vengono avviati per primi, seguiti dai servizi nei gruppi non inclusi nell'elenco dei gruppi di ordinamento del carico, seguiti da 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 di gruppi di ordinamento di carico che devono essere avviati prima dell'avvio del servizio. La matrice è con terminazione null doppia. 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 distinguerli 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 essere avviati prima dell'avvio del servizio. La matrice è con terminazione NULL doppia. 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 da cui dipende è in 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.

Success

0

La richiesta è stata accettata.

Non supportato

1

La richiesta non è supportata.

Accesso negato

2

L'utente non ha avuto l'accesso necessario.

Servizi dipendenti in esecuzione

3

Impossibile arrestare il servizio perché altri servizi in esecuzione dipendono dal servizio.

Controllo del servizio non valido

4

Il codice di controllo richiesto non è valido o non è accettabile per il servizio.

Il servizio non può accettare il controllo

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.

Servizio non attivo

6

Il servizio non è stato avviato.

Timeout della richiesta di servizio

7

Il servizio non ha risposto in tempo utile alla richiesta di avvio.

Errore sconosciuto

8

Errore sconosciuto durante l'avvio del servizio.

Percorso non trovato

9

Non è stato trovato il percorso della directory del file eseguibile del servizio.

Servizio già in esecuzione

10

Il servizio è già in esecuzione.

Database di servizio bloccato

11

Il database a cui aggiungere il nuovo servizio è bloccato.

Dipendenza del servizio eliminata

12

Una dipendenza da questo servizio si basa su è stata rimossa dal sistema.

Errore di dipendenza del servizio

13

Impossibile trovare un servizio dipendente necessario.

Servizio disabilitato

14

Il servizio è stato disabilitato dal sistema.

Accesso al servizio non riuscito

15

Il servizio non dispone delle credenziali di autenticazione corrette per l'esecuzione nel sistema.

Servizio contrassegnato per l'eliminazione

16

Questo servizio viene rimosso dal sistema.

Nessun thread del servizio

17

Il servizio non ha alcun thread di esecuzione.

Dipendenza circolare dello stato

18

Il servizio ha dipendenze circolari all'avvio.

Nome duplicato stato

19

Un servizio è in esecuzione con lo stesso nome.

Nome non valido dello stato

20

Il nome del servizio ha caratteri non validi.

Parametro stato non valido

21

I parametri non validi sono stati passati al servizio.

Account del servizio non valido stato

22

L'account in cui viene eseguito questo servizio non è valido o non dispone delle autorizzazioni per l'esecuzione del servizio.

Il servizio stato esiste

23

Il servizio esiste già nel database dei servizi disponibili dal sistema.

Servizio già sospeso

24

Il servizio è attualmente sospeso nel sistema.

Altri

25 4294967295

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_Service 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
Radice\CIMV2
Intestazione
Mbnapi.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Vedi anche

Classi del sistema operativo

Win32_Service

Attività WMI: Servizi