Alterações de serviço para Windows Vista

Houve mudanças significativas no modelo de serviços para melhorar o desempenho, a confiabilidade, a segurança, o gerenciamento e a administração de serviços.

A tabela a seguir resume os aprimoramentos nos serviços do Windows Vista.

Aprimoramento Descrição
Início Automático Atrasado
Os serviços de início automático atrasados são iniciados logo após o início do sistema. Isso melhora o desempenho de inicialização do sistema e ainda fornece inicialização automática para esses serviços. Para definir o sinalizador de início automático atrasado, chame a função ChangeServiceConfig2 com SERVICE_CONFIG_DELAYED_AUTO_START_INFO.
Detecção e recuperação de falhas
Se um serviço falhar, o SCM (gerenciador de controle de serviço) poderá executar uma ação de falha, como reiniciar o serviço na tentativa de se recuperar dessa falha. Para configurar uma ação de falha, chame ChangeServiceConfig2 com SERVICE_CONFIG_FAILURE_ACTIONS.
Notificações de pré-remoção
Um serviço pode se registrar para receber uma notificação SERVICE_CONTROL_PRESHUTDOWN em sua função HandlerEx antes de receber a notificação de desligamento real. Isso fornece aos serviços um longo procedimento de desligamento mais tempo para desligar normalmente. Para definir o valor de tempo limite, chame ChangeServiceConfig2 com SERVICE_CONFIG_PRESHUTDOWN_INFO.
Acesso restrito à rede
Você pode usar SIDs de serviço para restringir o acesso a portas, protocolos ou a direção do tráfego de rede. Para restringir o acesso de um serviço à rede, use a interface INetFwServiceRestriction .
Executando com privilégios mínimos
Os serviços podem ser executados em qualquer conta que contenha os privilégios necessários (LocalService, NetworkService, LocalSystem, uma conta de domínio ou uma conta local) e indicar os privilégios necessários chamando ChangeServiceConfig2 com SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO. O SCM remove todos os privilégios que não são necessários.
Isolamento de serviço
Um serviço pode isolar objetos, como arquivos ou chaves do Registro, para seu uso exclusivo protegendo-os com uma entrada de controle de acesso que contém um SID de serviço. Depois que esse SID tiver sido atribuído a um serviço, o proprietário do serviço poderá modificar as listas de controle de acesso dos objetos para conceder acesso ao SID. Isso permite que um serviço acesse objetos específicos sem ser executado em uma conta de alto privilégio ou reduza a segurança nos objetos. Para definir o SID de serviço, chame ChangeServiceConfig2 com SERVICE_CONFIG_SERVICE_SID_INFO.
Notificações de alteração do estado do serviço
Os serviços podem se registrar para serem notificados quando um serviço é criado, excluído ou tem uma alteração no status usando a função NotifyServiceStatusChange. Isso é mais eficiente do que chamar a função QueryServiceStatusEx em um loop para sondar status.
Isolamento da Sessão 0
Os serviços sempre foram executados na sessão 0. Antes do Windows Vista, o primeiro usuário a fazer logon também foi atribuído à sessão 0. Agora, a sessão 0 é reservada exclusivamente para serviços e outros aplicativos não associados a uma sessão interativa de usuário. (O primeiro usuário a fazer logon está conectado à sessão 1, o segundo usuário a fazer logon está conectado à sessão 2 e assim por diante.) A sessão 0 não dá suporte a processos que interagem com o usuário.
Essa alteração significa que um serviço não pode postar ou enviar uma mensagem para um aplicativo e um aplicativo não pode enviar ou postar uma mensagem para um serviço. Além disso, os serviços não podem exibir um item de interface do usuário, como uma caixa de diálogo diretamente. Um serviço pode usar a função WTSSendMessage para exibir uma caixa de diálogo em outra sessão.

Serviços