Condividi tramite


struttura SERVICE_STATUS (winsvc.h)

Contiene informazioni sullo stato per un servizio. Le funzioni ControlService, EnumDependentServices, EnumServicesStatus e QueryServiceStatus usano questa struttura. Un servizio usa questa struttura nella funzione SetServiceStatus per segnalarne lo stato corrente al gestore del controllo del servizio.

Sintassi

typedef struct _SERVICE_STATUS {
  DWORD dwServiceType;
  DWORD dwCurrentState;
  DWORD dwControlsAccepted;
  DWORD dwWin32ExitCode;
  DWORD dwServiceSpecificExitCode;
  DWORD dwCheckPoint;
  DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;

Members

dwServiceType

Tipo di servizio. Questo membro può essere uno dei valori seguenti.

Valore Significato
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
Il servizio è un driver di file system.
SERVICE_KERNEL_DRIVER
0x00000001
Il servizio è un driver di dispositivo.
SERVICE_WIN32_OWN_PROCESS
0x00000010
Il servizio viene eseguito nel proprio processo.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
Il servizio condivide un processo con altri servizi.
SERVICE_USER_OWN_PROCESS
0x00000050
Il servizio viene eseguito nel proprio processo nell'account utente connesso.
SERVICE_USER_SHARE_PROCESS
0x00000060
Il servizio condivide un processo con uno o più servizi eseguiti nell'account utente connesso.
 

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

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

Per altre informazioni, vedere Servizi interattivi.

dwCurrentState

Stato corrente del servizio. Questo membro può essere uno dei valori seguenti.

Valore Significato
SERVICE_CONTINUE_PENDING
0x00000005
La continuazione del servizio è in sospeso.
SERVICE_PAUSE_PENDING
0x00000006
La pausa del servizio è in sospeso.
SERVICE_PAUSED
0x00000007
Il servizio è in pausa.
SERVICE_RUNNING
0x00000004
Il servizio è in esecuzione.
SERVICE_START_PENDING
0x00000002
Il servizio è in fase di avvio.
SERVICE_STOP_PENDING
0x00000003
Il servizio è in fase di interruzione.
SERVICE_STOPPED
0x00000001
Il servizio non è in esecuzione.

dwControlsAccepted

Il codice di controllo accetta e elabora il servizio nella funzione del gestore (vedere Gestore e HandlerEx). Un processo dell'interfaccia utente può controllare un servizio specificando un comando di controllo nella funzione ControlService o ControlServiceEx. Per impostazione predefinita, tutti i servizi accettano il valore di SERVICE_CONTROL_INTERROGATE .

Per accettare il valore SERVICE_CONTROL_DEVICEEVENT , il servizio deve registrare per ricevere gli eventi del dispositivo usando la funzione RegisterDeviceNotification .

Di seguito sono riportati i codici di controllo.

Codice di controllo Significato
SERVICE_ACCEPT_NETBINDCHANGE
0x00000010
Il servizio è un componente di rete che può accettare modifiche nel relativo binding senza essere arrestato e riavviato.

Questo codice di controllo consente al servizio di ricevere notifiche di SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE, SERVICE_CONTROL_NETBINDENABLE e SERVICE_CONTROL_NETBINDDISABLE.

SERVICE_ACCEPT_PARAMCHANGE
0x00000008
Il servizio può rileggere i parametri di avvio senza essere arrestati e riavviati.

Questo codice di controllo consente al servizio di ricevere notifiche di SERVICE_CONTROL_PARAMCHANGE .

SERVICE_ACCEPT_PAUSE_CONTINUE
0x00000002
Il servizio può essere sospeso e continuato.

Questo codice di controllo consente al servizio di ricevere notifiche di SERVICE_CONTROL_PAUSE e SERVICE_CONTROL_CONTINUE .

SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
Il servizio può eseguire attività preshutdown.

Questo codice di controllo consente al servizio di ricevere notifiche di SERVICE_CONTROL_PRESHUTDOWN . Si noti che ControlService e ControlServiceEx non possono inviare questa notifica; solo il sistema può inviarlo.

Windows Server 2003 e Windows XP: Questo valore non è supportato.

SERVICE_ACCEPT_SHUTDOWN
0x00000004
Il servizio riceve una notifica quando si verifica l'arresto del sistema.

Questo codice di controllo consente al servizio di ricevere notifiche di SERVICE_CONTROL_SHUTDOWN . Si noti che ControlService e ControlServiceEx non possono inviare questa notifica; solo il sistema può inviarlo.

SERVICE_ACCEPT_STOP
0x00000001
Il servizio può essere arrestato.

Questo codice di controllo consente al servizio di ricevere notifiche di SERVICE_CONTROL_STOP .

 

Questo membro può anche contenere i codici di controllo estesi seguenti, supportati solo da HandlerEx. Si noti che questi codici di controllo non possono essere inviati da ControlService o ControlServiceEx.

Codice di controllo Significato
SERVICE_ACCEPT_HARDWAREPROFILECHANGE
0x00000020
Il servizio riceve una notifica quando il profilo hardware del computer è stato modificato. Ciò consente al sistema di inviare notifiche di SERVICE_CONTROL_HARDWAREPROFILECHANGE al servizio.
SERVICE_ACCEPT_POWEREVENT
0x00000040
Il servizio riceve una notifica quando lo stato di alimentazione del computer è cambiato. Ciò consente al sistema di inviare notifiche di SERVICE_CONTROL_POWEREVENT al servizio.
SERVICE_ACCEPT_SESSIONCHANGE
0x00000080
Il servizio riceve una notifica quando lo stato della sessione del computer è cambiato. Ciò consente al sistema di inviare notifiche SERVICE_CONTROL_SESSIONCHANGE al servizio.
SERVICE_ACCEPT_TIMECHANGE
0x00000200
Il servizio riceve una notifica quando l'ora di sistema è cambiata. Ciò consente al sistema di inviare notifiche SERVICE_CONTROL_TIMECHANGE al servizio.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Questo codice di controllo non è supportato.

SERVICE_ACCEPT_TRIGGEREVENT
0x00000400
Il servizio riceve una notifica quando si verifica un evento per il quale il servizio è stato registrato. Ciò consente al sistema di inviare notifiche SERVICE_CONTROL_TRIGGEREVENT al servizio.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Questo codice di controllo non è supportato.

SERVICE_ACCEPT_USERMODEREBOOT
0x00000800
I servizi vengono notificati quando l'utente avvia un riavvio.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Questo codice di controllo non è supportato.

dwWin32ExitCode

Il codice di errore usato dal servizio per segnalare un errore che si verifica all'avvio o all'arresto. Per restituire un codice di errore specifico del servizio, il servizio deve impostare questo valore su ERROR_SERVICE_SPECIFIC_ERROR per indicare che il membro dwServiceSpecificExitCode contiene il codice di errore. Il servizio deve impostare questo valore su NO_ERROR quando è in esecuzione e sulla terminazione normale.

dwServiceSpecificExitCode

Codice di errore specifico del servizio restituito quando si verifica un errore durante l'avvio o l'arresto del servizio. Questo valore viene ignorato a meno che il membro dwWin32ExitCode non sia impostato su ERROR_SERVICE_SPECIFIC_ERROR.

dwCheckPoint

Il valore del punto di controllo incrementa periodicamente il servizio per segnalarne lo stato durante un'operazione di avvio, arresto, sospensione o continuazione. Ad esempio, il servizio deve aumentare questo valore man mano che completa ogni passaggio della relativa inizializzazione quando viene avviato. Il programma dell'interfaccia utente che ha richiamato l'operazione nel servizio usa questo valore per tenere traccia dello stato di avanzamento del servizio durante un'operazione prolungata. Questo valore non è valido e deve essere zero quando il servizio non ha un avvio, un'interruzione, una pausa o continuare l'operazione in sospeso.

dwWaitHint

Tempo stimato necessario per un'operazione di avvio, arresto, sospensione o continuazione in millisecondi. Prima dell'intervallo di tempo specificato, il servizio deve effettuare la chiamata successiva alla funzione SetServiceStatus con un valore dwCheckPoint incrementato o una modifica in dwCurrentState. Se il tempo specificato da dwWaitHint passa e dwCheckPoint non è stato incrementato o dwCurrentState non è stato modificato, il programma di controllo del servizio o il programma di controllo del servizio può presumere che si sia verificato un errore e che il servizio deve essere arrestato. Tuttavia, se il servizio condivide un processo con altri servizi, il gestore del controllo del servizio non può terminare l'applicazione di servizio perché avrebbe dovuto terminare anche gli altri servizi che condividono il processo.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione winsvc.h (include Windows.h)

Vedi anche

ControlService

ControlServiceEx

EnumDependentServices

EnumServicesStatus

QueryServiceStatus

SetServiceStatus