Поделиться через


Службы и RPC/TCP

Начиная с Windows Vista диспетчер управления службами (SCM) поддерживает удаленные вызовы процедур по протоколу управления передачей (RPC/TCP) и именованным каналам (RPC/NP). Функции SCM на стороне клиента по умолчанию используют RPC/TCP.

RPC/TCP подходит для большинства приложений, которые удаленно используют функции SCM, такие как средства удаленного администрирования или мониторинга. Однако для обеспечения совместимости и производительности некоторым приложениям может потребоваться отключить RPC/TCP, задав значения реестра, описанные в этом разделе.

Когда служба вызывает удаленную функцию SCM, клиентская служба SCM сначала пытается использовать RPC/TCP для взаимодействия с SCM на стороне сервера. Если сервер работает под управлением версии Windows, которая поддерживает RPC/TCP и разрешает трафик RPC/TCP, подключение RPC/TCPP будет выполнено успешно. Если сервер работает под управлением версии Windows, которая не поддерживает RPC/TCP или поддерживает RPC/TCP, но работает за брандмауэром, который разрешает только трафик именованного канала, время ожидания подключения RPC/TCP и SCM повторяет попытку подключения с RPC/NP. В конечном итоге это будет успешно, но может занять некоторое время (обычно более 20 секунд), что приведет к блокировке функции OpenSCManager .

TCP не содержит учетные данные пользователя, указанные командой net use . Таким образом, если RPC/TCP включен и sc.exe используется для получения доступа к указанной службе, команда может завершиться ошибкой, если доступ запрещен. Отключение RPC/TCP на стороне клиента приводит к тому, что команда sc.exe будет использовать именованный канал, который содержит учетные данные пользователя, поэтому команда будет выполнена успешно. Сведения о sc.exe см. в разделе Управление службой с помощью SC.

Примечание

Служба не должна предоставлять явные учетные данные для команды net use , так как эти учетные данные могут быть случайно переданы за пределами службы. Вместо этого служба должна использовать олицетворение клиента для олицетворения пользователя.

 

Значения реестра RPC/TCP

RPC/TCP управляется значениями реестра SCMApiConnectionParam, DisableRPCOverTCP и DisableRemoteScmEndpoints, которые находятсяв разделеуправления HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\. Все эти значения имеют REG_DWORD тип данных. В следующих процедурах показано, как использовать эти значения реестра для управления RPC/TCP.

В следующей процедуре описывается, как отключить RPC/TCP на стороне клиента.

Отключение RPC/TCP на стороне клиента

  1. Объедините значение реестра SCMApiConnectionParam со значением маски 0x80000000.
  2. Перезапустите приложение, которое вызывает функцию OpenSCManager .

В следующей процедуре описывается отключение ПРОТОКОЛА TCP на стороне сервера.

Отключение TCP на стороне сервера

  1. Задайте для параметра реестра DisableRPCOverTCP значение 1.
  2. Перезапустите сервер.

В следующей процедуре описывается отключение RPC/TCP и RPC/NP на сервере (например, для уменьшения уязвимой зоны).

Отключение RPC/TCP и RPC/NP на сервере

  1. Задайте для параметра реестра DisableRemoteScmEndpoints значение 1.
  2. Перезапустите сервер.

Значение реестра SCMApiConnectionParam также можно использовать для указания интервала времени ожидания RPC/TCP в миллисекундах. Например, значение 30 000 указывает интервал времени ожидания в 30 секунд. Значение по умолчанию — 21 000 (21 секунда).