Compartilhar via


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

O método de classe ChangeWMI modifica um Win32_TerminalService.

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 é preservado por maiúsculas e minúsculas 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 falha. Todos os erros são registrados pelo sistema.

0

Ignorar. A inicialização continua. Nenhuma notificação é dada ao usuário de que o serviço falhou.

1

Normal. A inicialização continua. Antes que o usuário faça logon, o usuário recebe a notificação "Pelo menos um serviço ou dispositivo falhou durante a inicialização".

2

Grave. O computador tenta reiniciar com a última configuração válida conhecida. Se o serviço falhar novamente, a inicialização continuará e a notificação será fornecida ao usuário.

3

Crítica. O computador tenta reiniciar com a última configuração válida conhecida. Se o serviço falhar novamente, a inicialização será interrompida.

StartMode [in]

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

Boot

Driver de dispositivo iniciado pelo carregador do sistema operacional.

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

O serviço é iniciado automaticamente pelo gerenciador de controle de serviço durante a inicialização do sistema. Os serviços de início automático são iniciados antes que um usuário faça logon no computador e execute mesmo que nenhum usuário faça logon no computador.

Manual

Serviço a ser iniciado pelo gerenciador de controle de serviço quando um processo chama o método StartService . Embora os serviços manuais precisem ser iniciados especificamente por um usuário (ou por um script), eles continuam a ser executados mesmo que o usuário faça logoff. Os serviços manuais geralmente são chamados de serviços sob demanda.

Desativado

Serviço que não pode mais ser iniciado. Para iniciar um serviço desabilitado, primeiro você deve alterar a opção de inicialização para Automático ou Manual.

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 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 NOME UPN 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 ordem 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.

0

A solicitação foi aceita.

1

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

2

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

3

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

4

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

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.

6

O serviço não foi iniciado.

7

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

8

Falha desconhecida ao iniciar o serviço.

9

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

10

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

11

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

12

Uma dependência em que esse serviço depende foi removida do sistema.

13

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

14

O serviço foi desabilitado do sistema.

15

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

16

Esse serviço está sendo removido do sistema.

17

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

18

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

19

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

20

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

21

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

22

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

23

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

24

O serviço está pausado atualmente no sistema.

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 é instalada 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 a 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 servidores, determinados serviços sejam executados em determinadas contas. Você pode usar o método Change da classe Win32_TerminalService 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\TerminalServices
Cabeçalho
Mbnapi.h
MOF
TSCfgWmi.mof
DLL
TSCfgWmi.dll

Confira também

Win32_Service

Classes do sistema operacional

Win32_TerminalService

Tarefas do WMI: Serviços