Serviços e RPC/TCP

A partir do Windows Vista, o SCM (gerenciador de controle de serviço) dá suporte a chamadas de procedimento remoto por RPC/TCP (Protocolo de Controle de Transmissão) e pipes nomeados (RPC/NP). As funções SCM do lado do cliente usam RPC/TCP por padrão.

RPC/TCP é apropriado para a maioria dos aplicativos que usam funções SCM remotamente, como administração remota ou ferramentas de monitoramento. No entanto, para compatibilidade e desempenho, alguns aplicativos podem precisar desabilitar o RPC/TCP definindo os valores do Registro descritos neste tópico.

Quando um serviço chama uma função SCM remota, o SCM do lado do cliente primeiro tenta usar RPC/TCP para se comunicar com o SCM do lado do servidor. Se o servidor estiver executando uma versão do Windows compatível com RPC/TCP e permitir o tráfego RPC/TCP, a conexão RPC/TCPP terá êxito. Se o servidor estiver executando uma versão do Windows que não dá suporte a RPC/TCP ou dá suporte a RPC/TCP, mas está operando atrás de um firewall que permite apenas o tráfego de pipe nomeado, a conexão RPC/TCP atinge o tempo limite e o SCM repete a conexão com RPC/NP. Isso terá êxito eventualmente, mas pode levar algum tempo (normalmente mais de 20 segundos), fazendo com que a função OpenSCManager pareça bloqueada.

O TCP não carrega credenciais de usuário especificadas com um comando net use . Portanto, se o RPC/TCP estiver habilitado e sc.exe for usado para tentar acessar o serviço especificado, o comando poderá falhar com o acesso negado. Desabilitar o RPC/TCP no lado do cliente faz com que o comando sc.exe use um pipe nomeado que carregue as credenciais do usuário, para que o comando seja bem-sucedido. Para obter informações sobre sc.exe, consulte Controlando um serviço usando SC.

Observação

Um serviço não deve fornecer credenciais explícitas para um comando net use , pois essas credenciais podem ser compartilhadas inadvertidamente fora dos limites de serviço. Em vez disso, o serviço deve usar a representação do cliente para representar o usuário.

 

Valores do Registro RPC/TCP

O RPC/TCP é controlado pelos valores do Registro SCMApiConnectionParam, DisableRPCOverTCP e DisableRemoteScmEndpoints, todos sob a chave decontroleSYSTEM\CurrentControlSet\ do HKEY_LOCAL_MACHINE\. Todos esses valores têm um tipo de dados REG_DWORD. Os procedimentos a seguir mostram como usar esses valores de Registro para controlar RPC/TCP.

O procedimento a seguir descreve como desabilitar o RPC/TCP no lado do cliente.

Para desabilitar o RPC/TCP no lado do cliente

  1. Combine o valor do Registro SCMApiConnectionParam com o valor de máscara 0x80000000.
  2. Reinicie o aplicativo que chama a função OpenSCManager .

O procedimento a seguir descreve como desabilitar o TCP no lado do servidor.

Para desabilitar o TCP no lado do servidor

  1. Defina o valor do Registro DisableRPCOverTCP como 1.
  2. Reinicie o servidor.

O procedimento a seguir descreve como desabilitar RPC/TCP e RPC/NP no servidor (por exemplo, para reduzir a superfície de ataque).

Para desabilitar o RPC/TCP e o RPC/NP no servidor

  1. Defina o valor do Registro DisableRemoteScmEndpoints como 1.
  2. Reinicie o servidor.

O valor do registro SCMApiConnectionParam também pode ser usado para especificar o intervalo de tempo limite RPC/TCP, em milissegundos. Por exemplo, um valor de 30.000 especifica um intervalo de tempo limite de 30 segundos. O padrão é 21.000 (21 segundos).