服務和 RPC/TCP

從 Windows Vista 開始,服務控制管理員 (SCM) 支援透過傳輸控制通訊協定 (RPC/TCP) 和具名管道 (RPC/NP) 的遠端程序呼叫。 用戶端 SCM 函式預設會使用 RPC/TCP。

RPC/TCP 適用于遠端使用 SCM 函式的大部分應用程式,例如遠端系統管理或監視工具。 不過,基於相容性和效能,某些應用程式可能需要藉由設定本主題中所述的登錄值來停用 RPC/TCP。

當服務呼叫遠端 SCM 函式時,用戶端 SCM 會先嘗試使用 RPC/TCP 與伺服器端 SCM 通訊。 如果伺服器執行的是支援 RPC/TCP 且允許 RPC/TCP 流量的 Windows 版本,RPC/TCPP 連線將會成功。 如果伺服器執行的是不支援 RPC/TCP 的 Windows 版本,或支援 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 是由SCMApiConnectionParamDisableRPCOverTCPDisableRemoteScmEndpoints登錄值所控制,這些值全都位於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 秒) 。