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