estrutura SERVICE_STATUS (winsvc.h)

Contém status informações de um serviço. As funções ControlService, EnumDependentServices, EnumServicesStatus e QueryServiceStatus usam essa estrutura. Um serviço usa essa estrutura na função SetServiceStatus para relatar seu status atual ao gerenciador de controle de serviço.

Sintaxe

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

Membros

dwServiceType

O tipo do serviço. Esse membro pode ser um dos valores a seguir.

Valor Significado
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
O serviço é um driver do sistema de arquivos.
SERVICE_KERNEL_DRIVER
0x00000001
O serviço é um driver de dispositivo.
SERVICE_WIN32_OWN_PROCESS
0x00000010
O serviço é executado em seu próprio processo.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
O serviço compartilha um processo com outros serviços.
SERVICE_USER_OWN_PROCESS
0x00000050
O serviço é executado em seu próprio processo na conta de usuário conectada.
SERVICE_USER_SHARE_PROCESS
0x00000060
O serviço compartilha um processo com um ou mais outros serviços executados na conta de usuário conectada.
 

Se o tipo de serviço for SERVICE_WIN32_OWN_PROCESS ou SERVICE_WIN32_SHARE_PROCESS e o serviço estiver em execução no contexto da conta LocalSystem, o tipo a seguir também poderá ser especificado.

Valor Significado
SERVICE_INTERACTIVE_PROCESS
0x00000100
O serviço pode interagir com a área de trabalho.

Para obter mais informações, consulte Serviços Interativos.

dwCurrentState

O estado atual do serviço. Esse membro pode ser um dos valores a seguir.

Valor Significado
SERVICE_CONTINUE_PENDING
0x00000005
Continuar o serviço está pendente.
SERVICE_PAUSE_PENDING
0x00000006
Pausar o serviço está pendente.
SERVICE_PAUSED
0x00000007
O serviço está em pausa.
SERVICE_RUNNING
0x00000004
O serviço está em execução.
SERVICE_START_PENDING
0x00000002
O serviço está iniciando.
SERVICE_STOP_PENDING
0x00000003
Serviço está parando.
SERVICE_STOPPED
0x00000001
Serviço não está sendo executado.

dwControlsAccepted

O controle codifica que o serviço aceita e processa em sua função de manipulador (consulte Handler e HandlerEx). Um processo de interface do usuário pode controlar um serviço especificando um comando de controle na função ControlService ou ControlServiceEx . Por padrão, todos os serviços aceitam o valor SERVICE_CONTROL_INTERROGATE .

Para aceitar o valor SERVICE_CONTROL_DEVICEEVENT , o serviço deve se registrar para receber eventos de dispositivo usando a função RegisterDeviceNotification .

Veja a seguir os códigos de controle.

Código de controle Significado
SERVICE_ACCEPT_NETBINDCHANGE
0x00000010
O serviço é um componente de rede que pode aceitar alterações em sua associação sem ser interrompido e reiniciado.

Esse código de controle permite que o serviço receba notificações de SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE, SERVICE_CONTROL_NETBINDENABLE e SERVICE_CONTROL_NETBINDDISABLE .

SERVICE_ACCEPT_PARAMCHANGE
0x00000008
O serviço pode reler seus parâmetros de inicialização sem ser interrompido e reiniciado.

Esse código de controle permite que o serviço receba SERVICE_CONTROL_PARAMCHANGE notificações.

SERVICE_ACCEPT_PAUSE_CONTINUE
0x00000002
O serviço pode ser pausado e continuado.

Esse código de controle permite que o serviço receba notificações de SERVICE_CONTROL_PAUSE e SERVICE_CONTROL_CONTINUE .

SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
O serviço pode executar tarefas de pré-desligamento.

Esse código de controle permite que o serviço receba SERVICE_CONTROL_PRESHUTDOWN notificações. Observe que ControlService e ControlServiceEx não podem enviar esta notificação; somente o sistema pode enviá-lo.

Windows Server 2003 e Windows XP: Não há suporte para esse valor.

SERVICE_ACCEPT_SHUTDOWN
0x00000004
O serviço é notificado quando ocorre o desligamento do sistema.

Esse código de controle permite que o serviço receba SERVICE_CONTROL_SHUTDOWN notificações. Observe que ControlService e ControlServiceEx não podem enviar esta notificação; somente o sistema pode enviá-lo.

SERVICE_ACCEPT_STOP
0x00000001
O serviço pode ser interrompido.

Esse código de controle permite que o serviço receba SERVICE_CONTROL_STOP notificações.

 

Esse membro também pode conter os seguintes códigos de controle estendidos, que têm suporte apenas pelo HandlerEx. (Observe que esses códigos de controle não podem ser enviados por ControlService ou ControlServiceEx.)

Código de controle Significado
SERVICE_ACCEPT_HARDWAREPROFILECHANGE
0x00000020
O serviço é notificado quando o perfil de hardware do computador é alterado. Isso permite que o sistema envie SERVICE_CONTROL_HARDWAREPROFILECHANGE notificações para o serviço.
SERVICE_ACCEPT_POWEREVENT
0x00000040
O serviço é notificado quando a status de energia do computador é alterada. Isso permite que o sistema envie SERVICE_CONTROL_POWEREVENT notificações para o serviço.
SERVICE_ACCEPT_SESSIONCHANGE
0x00000080
O serviço é notificado quando a sessão do computador status foi alterada. Isso permite que o sistema envie SERVICE_CONTROL_SESSIONCHANGE notificações para o serviço.
SERVICE_ACCEPT_TIMECHANGE
0x00000200
O serviço é notificado quando a hora do sistema é alterada. Isso permite que o sistema envie SERVICE_CONTROL_TIMECHANGE notificações para o serviço.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Não há suporte para esse código de controle.

SERVICE_ACCEPT_TRIGGEREVENT
0x00000400
O serviço é notificado quando ocorre um evento para o qual o serviço foi registrado. Isso permite que o sistema envie SERVICE_CONTROL_TRIGGEREVENT notificações para o serviço.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Não há suporte para esse código de controle.

SERVICE_ACCEPT_USERMODEREBOOT
0x00000800
Os serviços são notificados quando o usuário inicia uma reinicialização.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Não há suporte para esse código de controle.

dwWin32ExitCode

O código de erro que o serviço usa para relatar um erro que ocorre quando ele está iniciando ou parando. Para retornar um código de erro específico ao serviço, o serviço deve definir esse valor como ERROR_SERVICE_SPECIFIC_ERROR para indicar que o membro dwServiceSpecificExitCode contém o código de erro. O serviço deve definir esse valor como NO_ERROR quando estiver em execução e no encerramento normal.

dwServiceSpecificExitCode

Um código de erro específico do serviço que o serviço retorna quando ocorre um erro enquanto o serviço está iniciando ou parando. Esse valor é ignorado, a menos que o membro dwWin32ExitCode esteja definido como ERROR_SERVICE_SPECIFIC_ERROR.

dwCheckPoint

O valor de ponto marcar o serviço incrementa periodicamente para relatar seu progresso durante uma longa operação de início, parada, pausa ou continuação. Por exemplo, o serviço deve incrementar esse valor à medida que concluir cada etapa de sua inicialização quando estiver sendo iniciado. O programa de interface do usuário que invocou a operação no serviço usa esse valor para acompanhar o progresso do serviço durante uma longa operação. Esse valor não é válido e deve ser zero quando o serviço não tiver uma operação de início, parada, pausa ou continuação pendente.

dwWaitHint

O tempo estimado necessário para uma operação pendente de início, parada, pausa ou continuação, em milissegundos. Antes que a quantidade de tempo especificada tenha decorrido, o serviço deve fazer sua próxima chamada para a função SetServiceStatus com um valor de dwCheckPoint incrementado ou uma alteração em dwCurrentState. Se o tempo especificado por dwWaitHint for aprovado e dwCheckPoint não tiver sido incrementado ou dwCurrentState não tiver sido alterado, o gerenciador de controle de serviço ou programa de controle de serviço poderá assumir que ocorreu um erro e o serviço deve ser interrompido. No entanto, se o serviço compartilhar um processo com outros serviços, o gerenciador de controle de serviço não poderá encerrar o aplicativo de serviço porque ele também teria que encerrar os outros serviços que compartilham o processo.

Requisitos

   
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho winsvc.h (inclua Windows.h)

Confira também

ControlService

ControlServiceEx

EnumDependentServices

EnumServicesStatus

QueryServiceStatus

SetServiceStatus