Condividi tramite


Funzione ChangeServiceConfigW (winsvc.h)

Modifica i parametri di configurazione di un servizio.

Per modificare i parametri di configurazione facoltativi, usare la funzione ChangeServiceConfig2 .

Sintassi

BOOL ChangeServiceConfigW(
  [in]            SC_HANDLE hService,
  [in]            DWORD     dwServiceType,
  [in]            DWORD     dwStartType,
  [in]            DWORD     dwErrorControl,
  [in, optional]  LPCWSTR   lpBinaryPathName,
  [in, optional]  LPCWSTR   lpLoadOrderGroup,
  [out, optional] LPDWORD   lpdwTagId,
  [in, optional]  LPCWSTR   lpDependencies,
  [in, optional]  LPCWSTR   lpServiceStartName,
  [in, optional]  LPCWSTR   lpPassword,
  [in, optional]  LPCWSTR   lpDisplayName
);

Parametri

[in] hService

Handle al servizio. Questo handle viene restituito dalla funzione OpenService o CreateService e deve avere il diritto di accesso SERVICE_CHANGE_CONFIG . Per altre informazioni, vedere Sicurezza del servizio e diritti di accesso.

[in] dwServiceType

Tipo di servizio. Specificare SERVICE_NO_CHANGE se non si modifica il tipo di servizio esistente; in caso contrario, specificare uno dei tipi di servizio seguenti.

Valore Significato
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
Servizio driver di file system.
SERVICE_KERNEL_DRIVER
0x00000001
Servizio driver.
SERVICE_WIN32_OWN_PROCESS
0x00000010
Servizio che viene eseguito nel proprio processo.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
Servizio che condivide un processo con altri servizi.
 

Se si specifica SERVICE_WIN32_OWN_PROCESS o SERVICE_WIN32_SHARE_PROCESS e il servizio è in esecuzione nel contesto dell'account LocalSystem, è anche possibile specificare il tipo seguente.

Valore Significato
SERVICE_INTERACTIVE_PROCESS
0x00000100
Il servizio può interagire con il desktop.

Per altre informazioni, vedere Servizi interattivi.

[in] dwStartType

Opzioni di avvio del servizio. Specificare SERVICE_NO_CHANGE se non si modifica il tipo di avvio esistente; in caso contrario, specificare uno dei valori seguenti.

Valore Significato
SERVICE_AUTO_START
0x00000002
Un servizio avviato automaticamente dal gestore del controllo del servizio durante l'avvio del sistema.
SERVICE_BOOT_START
0x00000000
Un driver di dispositivo avviato dal caricatore di sistema. Questo valore è valido solo per i servizi del driver.
SERVICE_DEMAND_START
0x00000003
Un servizio avviato dal gestore di controllo del servizio quando un processo chiama la funzione StartService .
SERVICE_DISABLED
0x00000004
Servizio che non può essere avviato. Tenta di avviare il servizio nel codice di errore ERROR_SERVICE_DISABLED.
SERVICE_SYSTEM_START
0x00000001
Un driver di dispositivo avviato dalla funzione IoInitSystem . Questo valore è valido solo per i servizi del driver.

[in] dwErrorControl

Gravità dell'errore e dell'azione eseguita, se il servizio non viene avviato. Specificare SERVICE_NO_CHANGE se non si modifica il controllo degli errori esistente; in caso contrario, specificare uno dei valori seguenti.

Valore Significato
SERVICE_ERROR_CRITICAL
0x00000003
Il programma di avvio registra l'errore nel registro eventi, se possibile. Se viene avviata l'ultima configurazione nota valida, l'operazione di avvio ha esito negativo. In caso contrario, il sistema viene riavviato con l'ultima configurazione valida nota.
SERVICE_ERROR_IGNORE
0x00000000
Il programma di avvio ignora l'errore e continua l'operazione di avvio.
SERVICE_ERROR_NORMAL
0x00000001
Il programma di avvio registra l'errore nel registro eventi, ma continua l'operazione di avvio.
SERVICE_ERROR_SEVERE
0x00000002
Il programma di avvio registra l'errore nel registro eventi. Se viene avviata l'ultima configurazione nota, l'operazione di avvio continua. In caso contrario, il sistema viene riavviato con l'ultima configurazione nota.

[in, optional] lpBinaryPathName

Percorso completo del file binario del servizio. Specificare NULL se non si modifica il percorso esistente. Se il percorso contiene uno spazio, deve essere citato in modo che venga interpretato correttamente. Ad esempio, "d:\my share\myservice.exe" deve essere specificato come ""d:\my share\myservice.exe"".

Il percorso può includere anche argomenti per un servizio di avvio automatico. Ad esempio, "d:\myshare\myservice.exe arg1 arg2". Questi argomenti vengono passati al punto di ingresso del servizio (in genere la funzione principale ).

Se si specifica un percorso in un altro computer, la condivisione deve essere accessibile dall'account computer del computer locale perché si tratta del contesto di sicurezza usato nella chiamata remota. Tuttavia, questo requisito consente qualsiasi potenziale vulnerabilità nel computer remoto per influire sul computer locale. Pertanto, è consigliabile usare un file locale.

[in, optional] lpLoadOrderGroup

Nome del gruppo di ordinamento del carico di cui questo servizio è membro. Specificare NULL se non si modifica il gruppo esistente. Specificare una stringa vuota se il servizio non appartiene a un gruppo.

Il programma di avvio usa i gruppi di ordinamento del carico per caricare i gruppi di servizi in un ordine specificato rispetto agli altri gruppi. L'elenco dei gruppi di ordinamento del carico è contenuto nel valore ServiceGroupOrder della chiave del Registro di sistema seguente:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

[out, optional] lpdwTagId

Puntatore a una variabile che riceve un valore di tag univoco nel gruppo specificato nel parametro lpLoadOrderGroup . Specificare NULL se non si modifica il tag esistente.

È possibile usare un tag per l'avvio del servizio all'interno di un gruppo di ordinamento di carico specificando un vettore di ordine tag nel valore GroupOrderList della chiave del Registro di sistema seguente:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

I tag vengono valutati solo per i servizi driver con SERVICE_BOOT_START o SERVICE_SYSTEM_START tipi di avvio.

[in, optional] lpDependencies

Puntatore a una matrice con terminazione null doppia di nomi separati da null di servizi o gruppi di ordinamento di carico che il sistema deve avviare prima che questo servizio possa essere avviato. 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. Specificare NULL se non si modificano le dipendenze esistenti. Specificare una stringa vuota se il servizio non ha dipendenze.

È necessario anteporre nomi di gruppo con SC_GROUP_IDENTIFIER in modo che possano essere distinti da un nome di servizio, perché i servizi e i gruppi di servizi condividono lo stesso spazio dei nomi.

[in, optional] lpServiceStartName

Nome dell'account in cui deve essere eseguito il servizio. Specificare NULL se non si modifica il nome dell'account esistente. Se il tipo di servizio è SERVICE_WIN32_OWN_PROCESS, usare un nome account nel formato NomeUtente DomainName\. Il processo del servizio verrà connesso come utente. Se l'account appartiene al dominio predefinito, è possibile specificare .\UserName (si noti che la stringa C/C++ corrispondente è ".\\UserName"). Per altre informazioni, vedere Account utente del servizio e l'avviso nella sezione Osservazioni.

Un processo condiviso può essere eseguito come qualsiasi utente.

Se il tipo di servizio è SERVICE_KERNEL_DRIVER o SERVICE_FILE_SYSTEM_DRIVER, il nome è il nome dell'oggetto driver usato dal sistema per caricare il driver di dispositivo. Specificare NULL se il driver deve usare un nome di oggetto predefinito creato dal sistema di I/O.

Un servizio può essere configurato per l'uso di un account gestito o di un account virtuale. Se il servizio è configurato per l'uso di un account del servizio gestito, il nome è il nome dell'account del servizio gestito. Se il servizio è configurato per l'uso di un account virtuale, specificare il nome NT SERVICE\ServiceName. Per altre informazioni sugli account del servizio gestito e sugli account virtuali, vedere la Guida dettagliata agli account del servizio.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Gli account del servizio gestito e gli account virtuali non sono supportati fino a Windows 7 e Windows Server 2008 R2.

[in, optional] lpPassword

Password del nome dell'account specificato dal parametro lpServiceStartName . Specificare NULL se non si modifica la password esistente. Specificare una stringa vuota se l'account non ha password o se il servizio viene eseguito nell'account LocalService, NetworkService o LocalSystem. Per altre informazioni, vedere Elenco di record del servizio.

Se il nome dell'account specificato dal parametro lpServiceStartName è il nome di un account del servizio gestito o di un nome account virtuale, il parametro lpPassword deve essere NULL.

Le password vengono ignorate per i servizi driver.

[in, optional] lpDisplayName

Nome visualizzato da usare dalle applicazioni per identificare il servizio per gli utenti. Specificare NULL se non si modifica il nome visualizzato esistente; in caso contrario, questa stringa ha una lunghezza massima di 256 caratteri. Il nome viene mantenuto senza maiuscole/minuscole nella gestione controllo del servizio. I confronti dei nomi visualizzati sono sempre senza distinzione tra maiuscole e minuscole.

Questo parametro può specificare una stringa localizzata usando il formato seguente:

@[path]dllname,-strID

La stringa con identificatore strID viene caricata da dllname; il percorso è facoltativo. Per altre informazioni, vedere RegLoadMUIString.

Windows Server 2003 e Windows XP: Le stringhe localizzate non sono supportate fino a Windows Vista.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

I codici di errore seguenti possono essere impostati dal gestore di controllo del servizio. Altri codici di errore possono essere impostati dalle funzioni del Registro di sistema chiamate dal gestore di controllo del servizio.

Codice restituito Descrizione
ERROR_ACCESS_DENIED
L'handle non dispone del diritto di accesso SERVICE_CHANGE_CONFIG .
ERROR_CIRCULAR_DEPENDENCY
È stata specificata una dipendenza del servizio circolare.
ERROR_DUPLICATE_SERVICE_NAME
Il nome visualizzato esiste già nel database di gestione del controller di servizio, come nome del servizio o come altro nome visualizzato.
ERROR_INVALID_HANDLE
L'handle specificato non è valido.
ERROR_INVALID_PARAMETER
Parametro specificato non valido.
ERROR_INVALID_SERVICE_ACCOUNT
Il nome dell'account non esiste o un servizio viene specificato per condividere lo stesso file binario di un servizio già installato, ma con un nome di account diverso da quello del servizio installato.
ERROR_SERVICE_MARKED_FOR_DELETE
Il servizio è stato contrassegnato per l'eliminazione.

Commenti

La funzione ChangeServiceConfig modifica le informazioni di configurazione per il servizio specificato nel database di Gestione controllo dei servizi. È possibile ottenere le informazioni di configurazione correnti usando la funzione QueryServiceConfig .

Se la configurazione viene modificata per un servizio in esecuzione, ad eccezione di lpDisplayName, le modifiche non vengono applicate finché il servizio non viene arrestato. Per aggiornare le credenziali senza dover riavviare il servizio, usare la funzione LsaCallAuthenticationPackage .

Osservazioni sulla sicurezza

L'impostazione del parametro lpServiceStartName modifica l'account di accesso del servizio. Ciò può causare problemi. Se è stato registrato un nome dell'entità servizio (SPN), verrà registrato nell'account errato. Analogamente, se è stata usata una ace per concedere l'accesso a un servizio, ora concederebbe l'accesso all'account errato.

Esempio

Per un esempio, vedere Modifica della configurazione di un servizio.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winsvc.h (include Windows.h)
Libreria Advapi32.lib
DLL Advapi32.dll

Vedi anche

ChangeServiceConfig2

CreateService

Openservice

QueryServiceConfig

QueryServiceConfig2

QueryServiceDynamicInformation

Guida dettagliata agli account del servizio gestiti

Configurazione del servizio

Funzioni del servizio

Startservice