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 |
|
MOF |
|
DLL |
|