Compartilhar via


Alterar o método da classe Win32_Service (Mbnapi.h)

O método alterarclasse WMI modifica um Win32_Service.

Este tópico usa a sintaxe MOF (Managed Object Format). Para obter mais informações sobre como usar esse método, consulte Chamando um método.

Sintaxe

uint32 Change(
  [in] string  DisplayName,
  [in] string  PathName,
  [in] uint32  ServiceType,
  [in] uint32  ErrorControl,
  [in] string  StartMode,
  [in] boolean DesktopInteract,
  [in] string  StartName,
  [in] string  StartPassword,
  [in] string  LoadOrderGroup,
  [in] string  LoadOrderGroupDependencies[],
  [in] string  ServiceDependencies[]
);

Parâmetros

DisplayName [in]

O nome para exibição do serviço. Essa cadeia de caracteres tem um tamanho máximo de 256 caracteres. O nome é case- preservado no gerenciador de controle de serviço. As comparações de DisplayName sempre diferenciam maiúsculas de minúsculas.

Restrições: aceita o mesmo valor que a propriedade Name .

Exemplo, "Atdisk".

PathName [in]

O caminho totalmente qualificado para o arquivo executável que implementa o serviço, por exemplo, "\SystemRoot\System32\drivers\afd.sys".

ServiceType [in]

O tipo de serviços fornecidos aos processos que os chamam.

1 (0x1)

Kernel Driver

2 (0x2)

Driver do Sistema de Arquivos

4 (0x4)

Adaptador

8 (0x8)

Driver do Reconhecedor

16 (0x10)

Processo Próprio

32 (0x20)

Compartilhar Processo

256 (0x100)

Processo Interativo

ErrorControl [in]

Gravidade do erro se esse serviço não for iniciado durante a inicialização. O valor indica a ação executada pelo programa de inicialização se ocorrer uma falha. Todos os erros são registrados pelo sistema.

Ignorar (0)

O usuário não é notificado.

Normal (1)

Normal. O usuário é notificado.

Grave (2)

O sistema é reiniciado com a última boa configuração.

Crítico (3)

O sistema tenta reiniciar com uma configuração adequada.

StartMode [in]

Modo inicial do serviço base do Windows. Para obter mais informações, consulte a seção Comentários.

Inicialização

Driver de dispositivo iniciado pelo carregador do sistema operacional. Esse valor só é válido para serviços do driver.

Sistema

Driver de dispositivo iniciado pelo processo de inicialização do sistema operacional. Esse valor só é válido para serviços do driver.

Automático

Serviço a ser iniciado automaticamente pelo Service Control Manager durante a inicialização do sistema.

Manual

Serviço a ser iniciado pelo Service Control Manager quando um processo chama o método StartService .

Desabilitado

Serviço que não pode mais ser iniciado.

DesktopInteract [in]

Se True, o serviço poderá criar ou se comunicar com uma janela na área de trabalho.

StartName [in]

Nome da conta em que o serviço é executado. Dependendo do tipo de serviço, o nome da conta pode estar na forma de DomainName\Username ou .\Username. O processo de serviço será registrado usando um desses dois formulários quando ele for executado. Se a conta pertencer ao domínio interno, .\Username poderá ser especificado. Se NULL for especificado, o serviço será conectado como a conta LocalSystem. Para drivers de kernel ou de nível de sistema, StartName contém o nome do objeto do driver (ou seja, \FileSystem\Rdr ou \Driver\Xns) que o sistema de entrada e saída (E/S) usa para carregar o driver do dispositivo. Se NULL for especificado, o driver será executado com um nome de objeto padrão criado pelo sistema de E/S com base no nome do serviço, por exemplo, "DWDOM\Administração".

Você também pode usar o formato UPN (Nome da Entidade de Usuário) para especificar o StartName, por exemplo, Username@DomainName.

StartPassword [in]

Senha para o nome da conta especificado pelo parâmetro StartName . Especifique NULL se você não estiver alterando a senha. Especifique uma cadeia de caracteres vazia se o serviço não tiver nenhuma senha.

Observação

Ao alterar um serviço de um sistema local para uma rede ou de uma rede para um sistema local, StartPassword deve ser uma cadeia de caracteres vazia ("") e não NULL.

LoadOrderGroup [in]

Nome do grupo ao qual ele está associado. Os grupos de pedidos de carga estão contidos no registro do sistema e determinam a sequência na qual os serviços são carregados no sistema operacional. Se o ponteiro for NULL ou se apontar para uma cadeia de caracteres vazia, o serviço não pertencerá a um grupo. Para obter mais informações, consulte a seção Comentários.

As dependências entre grupos devem ser listadas no parâmetro LoadOrderGroupDependencies . Os serviços na lista de grupos de ordenação de carga são iniciados primeiro, seguidos por serviços em grupos que não estão na lista de grupos de ordenação de carga, seguidos por serviços que não pertencem a um grupo. O registro do sistema tem uma lista de grupos de ordenação de carga localizados em:

HKEY_LOCAL_MACHINE\Sistema\Currentcontrolset\Controle\ServiceGroupOrder

LoadOrderGroupDependencies [in]

Lista de grupos de ordenação de carga que devem ser iniciados antes do início desse serviço. A matriz é duplamente terminada em nulo. Se o ponteiro for NULL ou se apontar para uma cadeia de caracteres vazia, o serviço não terá dependências. Os nomes de grupo devem ser prefixados pelo caractere SC_GROUP_IDENTIFIER (definido no arquivo Winsvc.h) para diferenciá-los dos nomes de serviço porque serviços e grupos de serviços compartilham o mesmo namespace. A dependência em um grupo significa que esse serviço pode ser executado se pelo menos um membro do grupo estiver em execução após uma tentativa de iniciar todos os membros do grupo.

ServiceDependencies [in]

Lista que contém os nomes dos serviços que devem ser iniciados antes do início desse serviço. A matriz é duplamente terminada em NULL. Se o ponteiro for NULL ou se apontar para uma cadeia de caracteres vazia, o serviço não terá dependências. A dependência de um serviço indica que esse serviço só poderá ser executado se o serviço do qual ele depende estiver em execução.

Valor retornado

Retorna um dos valores listados na lista a seguir ou qualquer outro valor para indicar um erro. Para obter códigos de erro adicionais, consulte Constantes de erro WMI ou WbemErrorEnum. Para obter valores gerais de HRESULT , consulte Códigos de erro do sistema.

Êxito

0

A solicitação foi aceita.

Sem suporte

1

A solicitação não terá suporte.

Acesso negado

2

O usuário não tinha o acesso necessário.

Serviços dependentes em execução

3

O serviço não pode ser interrompido, porque outros serviços em execução dependem dele.

Controle de serviço inválido

4

O código de controle pedido não é válido ou é inaceitável para o serviço.

O serviço não pode aceitar o controle

5

O código de controle solicitado não pode ser enviado ao serviço porque o estado do serviço (Win32_BaseService. Propriedade State ) é igual a 0, 1 ou 2.

Serviço Não Ativo

6

O serviço não foi iniciado.

Tempo limite da solicitação de serviço

7

O serviço não respondeu à solicitação de início em um tempo oportuno.

Falha desconhecida

8

Falha desconhecida ao iniciar o serviço.

Caminho Não Encontrado

9

O caminho do diretório para o arquivo executável do serviço não foi encontrado.

Serviço já em execução

10

O serviço já está em execução.

Banco de Dados de Serviço Bloqueado

11

O banco de dados para adicionar um serviço novo está bloqueado.

Dependência de serviço excluída

12

Uma dependência da qual esse serviço depende foi removida do sistema.

Falha na dependência do serviço

13

O serviço não localizou o serviço necessário em um serviço dependente.

Serviço Desabilitado

14

O serviço foi desabilitado do sistema.

Falha no logon do serviço

15

O serviço não tem a autenticação correta para ser executado no sistema.

Serviço marcado para exclusão

16

Esse serviço está sendo removido do sistema.

Serviço Sem Thread

17

O serviço não tem thread de execução.

Dependência circular de status

18

O serviço tem dependências circulares quando é iniciado.

Nome duplicado de status

19

Um serviço está em execução com o mesmo nome.

Nome Inválido de Status

20

O nome do serviço tem caracteres inválidos.

Parâmetro Inválido de Status

21

Parâmetros inválidos foram passados para o serviço.

Status Inválido Conta de Serviço

22

A conta na qual esse serviço é executado é inválida ou não tem as permissões para executar o serviço.

O Serviço de Status existe

23

O serviço existe no banco de dados de serviços disponível no sistema.

Serviço já pausado

24

O serviço está pausado atualmente no sistema.

Outros

25 4294967295

Comentários

Quando um computador é iniciado, todos os serviços de início automático também são iniciados. Às vezes, um desses serviços pode falhar ao iniciar junto com o computador. Quando um serviço falha durante a inicialização do sistema, o computador executa uma ação com base no valor do código de controle de erro do serviço.

a maioria dos serviços são instalados usando o código de controle de erro Normal. Algumas das exceções, que são instaladas usando o código de erro Ignorar, incluem:

  • Serviço de Replicação de Arquivos
  • Cartão inteligente
  • Logon Secundário
  • WMI

Para os serviços instalados usando o código de erro Ignorar, nenhuma notificação é dada ao usuário de que o serviço falhou. Se preferir uma notificação na tela de que um serviço não pôde ser iniciado, você poderá usar o WMI para alterar o código de controle de erro. Os códigos de controle de erro se aplicam somente à inicialização do computador; os códigos de controle de erro não serão usados se você parar e tentar reiniciar um serviço depois que o computador estiver em execução.

Às vezes, talvez seja necessário alterar a conta na qual um determinado serviço é executado. Por exemplo, você pode executar um serviço em uma conta administrativa. Como isso pode criar uma vulnerabilidade de segurança, você pode mudar o serviço para uma conta com menos privilégios. Como alternativa, você pode ter serviços em execução em uma conta que está prestes a ser excluída ou talvez queira garantir que, em todos os seus servidores, determinados serviços sejam executados em determinadas contas. Você pode usar o método Change da classe Win32_Service para configurar serviços a serem executados em uma conta de usuário especificada. Ao selecionar uma conta, tenha em mente o seguinte:

  • A conta que está sendo usada como uma conta de serviço deve ter o direito de fazer logon como um serviço. Esse direito pode ser concedido usando Política de Grupo.

  • A conta que está sendo usada como uma conta de serviço não deve ser membro de um grupo local, de domínio ou de administradores corporativos.

  • Cada instância de um serviço deve ser executada em uma conta de usuário exclusiva. Isso fornece segurança adicional e permite a auditoria de instâncias de serviço individuais.

  • Se o serviço for interativo, o serviço deverá ser executado na conta LocalSystem.

    LocalSystem é necessário porque apenas uma estação de janela (WinSta0) pode ser visível e interativa por vez. Se um serviço for executado em uma conta diferente de LocalSystem, ele será executado na estação de janela Service-0x03e7$\Default, que é uma janela invisível. Os serviços em execução nesta estação de janela não podem receber entrada ou exibição de saída.

Quando você atribui uma conta a um serviço, o SCM requer a senha correta para essa conta antes de fazer a atribuição. Se você fornecer uma senha incorreta, o SCM rejeitará a conta. Se você configurar uma conta de serviço usando a conta LocalSystem, LocalService ou NetworkService, não precisará fornecer uma senha de conta porque essas contas não têm senhas.

O SCM armazena a senha da conta no banco de dados de serviços. No entanto, depois que a senha é atribuída, o SCM não garante que a senha armazenada no banco de dados de serviços e a senha atribuída à conta de usuário no Active Directory continuem a corresponder. Consequentemente, pode ocorrer uma situação semelhante à seguinte:

  • Você configura um serviço para ser executado em uma conta de usuário específica.
  • O serviço é iniciado nessa conta usando a senha da conta atual.
  • Você altera a senha da conta de usuário.
  • O serviço continua a ser executado. No entanto, se o serviço for interrompido, você não poderá reiniciá-lo porque o SCM continuará a usar a senha antiga e inválida. Alterar a senha no Active Directory não altera a senha armazenada no banco de dados de serviços.

Se você executar serviços em contas de usuário regulares, precisará atualizar essas senhas de serviço sempre que a senha da conta de usuário for alterada. Isso pode ser particularmente demorado se você não tiver certeza de quais serviços estão em execução nessa conta ou quais computadores têm serviços em execução nessa conta. Felizmente, você pode usar o WMI para marcar as contas de serviço em todos os seus computadores e, se necessário, alterar a senha da conta de serviço.

O parâmetro Win32_LoadOrderGroup representa um grupo de serviços do sistema que definem dependências de execução. Os serviços devem ser iniciados na ordem especificada pelo Grupo de Ordem de Carga porque os serviços dependem uns dos outros. Esses serviços dependentes exigem que a presença dos serviços antecedentes funcione corretamente.

Para alterar um serviço de um serviço de rede para um sistema local, os parâmetros StartName e StartPassword devem ter os seguintes valores:

StartName = "LocalSystem"
StartPassword = "" // - empty string, not NULL

Para alterar um serviço de um serviço de sistema local para uma rede, os parâmetros StartName e StartPassword devem ter os seguintes valores:

StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL

Exemplos

O VBScript a seguir altera a conta de serviço para serviços de execução em uma conta de usuário especificada para LocalSystem.

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2")
Set colServiceList = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objService in colServices
 errServiceChange = objService.Change( , , , , , , ".\LocalSystem" , "")
Next

O VBScript a seguir altera a senha da conta de serviço para todos os scripts em execução no Netsvc

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2")
Set colServiceList = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objservice in colServiceList
 errReturn = objService.Change( , , , , , , , "password")
Next

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista
Servidor mínimo com suporte
Windows Server 2008
Namespace
Root\CIMV2
Cabeçalho
Mbnapi.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Confira também

Classes do sistema operacional

Win32_Service

Tarefas do WMI: Serviços