Dienste und RPC/TCP

Ab Windows Vista unterstützt der Dienststeuerungs-Manager (SCM) Remoteprozeduraufrufe sowohl über das Transmission Control Protocol (RPC/TCP) als auch über Named Pipes (RPC/NP). Clientseitige SCM-Funktionen verwenden standardmäßig RPC/TCP.

RPC/TCP eignet sich für die meisten Anwendungen, die SCM-Funktionen remote verwenden, z. B. Remoteverwaltungs- oder Überwachungstools. Aus Gründen der Kompatibilität und Leistung müssen einige Anwendungen RPC/TCP jedoch möglicherweise deaktivieren, indem sie die in diesem Thema beschriebenen Registrierungswerte festlegen.

Wenn ein Dienst eine Remote-SCM-Funktion aufruft, versucht der clientseitige SCM zunächst, RPC/TCP für die Kommunikation mit dem serverseitigen SCM zu verwenden. Wenn auf dem Server eine Windows-Version ausgeführt wird, die RPC/TCP unterstützt und RPC/TCP-Datenverkehr zulässt, ist die RPC/TCPP-Verbindung erfolgreich. Wenn auf dem Server eine Windows-Version ausgeführt wird, die RPC/TCP nicht unterstützt oder RPC/TCP unterstützt, aber hinter einer Firewall ausgeführt wird, die nur benannten Pipedatenverkehr zulässt, wird für die RPC/TCP-Verbindung ein Timeout ausgeführt, und der SCM versucht erneut die Verbindung mit RPC/NP. Dies wird schließlich erfolgreich sein, kann jedoch einige Zeit dauern (in der Regel mehr als 20 Sekunden), wodurch die OpenSCManager-Funktion blockiert erscheint.

TCP enthält keine Benutzeranmeldeinformationen, die mit einem net use-Befehl angegeben wurden. Wenn RPC/TCP aktiviert ist und sc.exe verwendet wird, um auf den angegebenen Dienst zuzugreifen, kann der Befehl daher fehlschlagen, wenn der Zugriff verweigert wurde. Das Deaktivieren von RPC/TCP auf der Clientseite führt dazu, dass der sc.exe-Befehl eine benannte Pipe verwendet, die Benutzeranmeldeinformationen enthält, sodass der Befehl erfolgreich ist. Informationen zu sc.exe finden Sie unter Steuern eines Diensts mithilfe von SC.

Hinweis

Ein Dienst sollte keine expliziten Anmeldeinformationen für einen Net Use-Befehl bereitstellen, da diese Anmeldeinformationen möglicherweise versehentlich außerhalb der Dienstgrenzen freigegeben werden. Stattdessen sollte der Dienst den Clientidentitätswechsel verwenden, um die Identität des Benutzers zu imitieren.

 

RPC/TCP-Registrierungswerte

RPC/TCP wird von den Registrierungswerten SCMApiConnectionParam, DisableRPCOverTCP und DisableRemoteScmEndpoints gesteuert, die sich alle unter dem HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet-Steuerelementschlüssel\ befinden. Alle diese Werte verfügen über einen REG_DWORD Datentyp. Die folgenden Verfahren zeigen, wie Sie diese Registrierungswerte verwenden, um RPC/TCP zu steuern.

Im folgenden Verfahren wird beschrieben, wie RPC/TCP auf der Clientseite deaktiviert wird.

So deaktivieren Sie RPC/TCP auf der Clientseite

  1. Kombinieren Sie den Registrierungswert SCMApiConnectionParam mit dem Maskenwert 0x80000000.
  2. Starten Sie die Anwendung neu, die die OpenSCManager-Funktion aufruft.

Im folgenden Verfahren wird beschrieben, wie TCP auf der Serverseite deaktiviert wird.

So deaktivieren Sie TCP auf der Serverseite

  1. Legen Sie den Registrierungswert DisableRPCOverTCP auf 1 fest.
  2. Starten Sie den Server neu.

Im folgenden Verfahren wird beschrieben, wie sowohl RPC/TCP als auch RPC/NP auf dem Server deaktiviert werden (z. B. um die Angriffsfläche zu verringern).

So deaktivieren Sie RPC/TCP und RPC/NP auf dem Server

  1. Legen Sie den Registrierungswert DisableRemoteScmEndpoints auf 1 fest.
  2. Starten Sie den Server neu.

Der Registrierungswert SCMApiConnectionParam kann auch verwendet werden, um das RPC/TCP-Timeoutintervall in Millisekunden anzugeben. Beispielsweise gibt ein Wert von 30.000 ein Timeoutintervall von 30 Sekunden an. Der Standardwert ist 21.000 (21 Sekunden).