svchost.exe - svchost.exe

Svchost.exe ( Diensthost oder SvcHost ) ist ein System - Prozess das kann Host von einem oder mehreren Windows - Dienste in der Windows NT - Familie von Betriebssystemen . Svchost ist bei der Implementierung von Shared-Service-Prozessen unerlässlich , bei denen sich mehrere Dienste einen Prozess teilen können, um den Ressourcenverbrauch zu reduzieren. Das Gruppieren mehrerer Dienste in einem einzigen Prozess spart Rechenressourcen, und diese Überlegung war für NT-Designer von besonderer Bedeutung, da das Erstellen von Windows-Prozessen mehr Zeit und Speicher beansprucht als in anderen Betriebssystemen, z. B. in der Unix- Familie. Wenn jedoch einer der Dienste eine unbehandelte Ausnahme verursacht, kann der gesamte Prozess abstürzen. Darüber hinaus kann die Identifizierung von Komponentendiensten für Endbenutzer schwieriger sein. Probleme mit verschiedenen gehosteten Diensten, insbesondere mit Windows Update , werden von Benutzern (und von der Presse mit Schlagzeilen) als svchost gemeldet.

Der svchost-Prozess wurde in Windows 2000 eingeführt , obwohl die zugrunde liegende Unterstützung für Shared-Service-Prozesse seit Windows NT 3.1 existiert .

Implementierung

Das ausführbare Image %SystemRoot% \System32\Svchost.exe oder %SystemRoot% \SysWOW64\Svchost.exe (für 32-Bit-Dienste, die auf 64-Bit-Systemen ausgeführt werden) wird in mehreren Instanzen ausgeführt, von denen jede einen oder mehrere Dienste hostet .

Dienste, die in SvcHost ausgeführt werden, werden als dynamisch verknüpfte Bibliotheken (DLLs) implementiert . Der Registrierungsschlüssel jedes Dienstes muss einen Wert namens ServiceDll im Unterschlüssel Parameters aufweisen , der auf die DLL-Datei des jeweiligen Dienstes verweist. Ihre ImagePath- Definition hat die Form %SystemRoot%\System32\svchost.exe -k (Dienstgruppe; dh netsvcs) . Dienste, die denselben SvcHost-Prozess verwenden, geben denselben Parameter an und haben einen einzigen Eintrag in der SCM -Datenbank. Wenn ein SvcHost-Prozess zum ersten Mal mit einem bestimmten Parameter gestartet wird, sucht er unter dem Schlüssel HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost nach einem Wert mit demselben Namen , der als Liste von Dienstnamen interpretiert wird. Dann benachrichtigt es den SCM über alle Dienste, die es hostet. SCM startet für keinen dieser empfangenen Dienste einen zweiten SvcHost-Prozess: Stattdessen sendet es einfach einen "Start"-Befehl an den entsprechenden SvcHost-Prozess, der den Namen des Dienstes enthält, der in seinem Kontext gestartet werden soll, und dessen jeweilige DLL SvcHost Ladungen.

Laut einer 2003 MS - Präsentation, die minimalen Arbeitsseiten eines Shared - Service ist rund 150 KB statt 800 KB für einen eigenständigen Prozess.

Änderungen an der Diensthostgruppierung in Windows 10

Ab Windows 10 Version 1903 hat Microsoft die Art und Weise geändert, wie Dienste in Hostprozesse gruppiert werden. Auf Clientcomputersystemen mit mehr als 3,5 GB Arbeitsspeicher werden Dienste nicht mehr in gemeinsam genutzten Hostprozessen gruppiert. Stattdessen wird jeder Dienst in einem eigenen Prozess ausgeführt. Dies führt zu einer besseren Isolierung von Diensten, wodurch das Computersystem widerstandsfähiger gegenüber Dienstausfällen und Sicherheitslücken und leichter zu debuggen ist. Es fügt jedoch einen gewissen Speicher-Overhead hinzu.

Service-Tags

Ab Windows Vista wird die interne Identifizierung von Diensten innerhalb gemeinsamer Prozesse (einschließlich svchost) durch sogenannte Service-Tags erreicht. Das Service-Tag für jeden Thread wird im SubProcessTag seines Thread-Umgebungsblocks (TEB) gespeichert . Das Tag wird an alle Threads weitergegeben, die anschließend von einem Hauptdienstthread gestartet werden, mit Ausnahme von Threads, die indirekt von Windows- Threadpool- APIs erstellt wurden.

Der Satz von Service-Tag-Verwaltungsroutinen ist derzeit eine undokumentierte API , obwohl sie von einigen Windows-Dienstprogrammen wie netstat verwendet wird , um die mit jedem Dienst verbundenen TCP- Verbindungen anzuzeigen . Einige Tools von Drittanbietern wie ScTagQuery verwenden diese API ebenfalls.

Svchost.exe (netsvcs)

Netsvcs ist ein Unterprozess, der von svchost.exe (netsvcs) verwendet wird. Wenn und wenn ein Speicherleck auftritt, verbraucht und belastet die svchost.exe die CPU. Dieses Problem tritt auf, weil im Winmgmt-Dienst nach der Installation von Windows Management Framework 3.0 auf dem Computer ein Handle-Leck auftritt. Der Winmgmt-Dienst ist der Windows Management Instrumentation (WMI)-Dienst innerhalb des svchost.exe-Prozesses, der unter dem LocalSystem-Konto ausgeführt wird.

Identifizierung und Verwaltung von gehosteten Diensten

In Windows XP und späteren Editionen zeigt der Befehl tasklist /svc eine Liste der Dienste an, die von jedem aufgelisteten Prozess (dh von jeder laufenden Instanz von svchost.exe) ausgeführt werden, wobei jede einzelne Instanz des svchost-Prozesses durch eine eindeutige Prozess-ID identifiziert wird Nummer (PID).

In Windows Vista und Windows 7 enthält die Registerkarte "Dienste" im Windows Task-Manager eine Liste von Diensten mit ihren Gruppen und Prozess-IDs (PIDs); ein Rechtsklick auf eine svchost-Instanz in der Registerkarte "Prozesse" des Task-Managers und Auswahl von "Gehe zu Dienst(en)" wechselt zu dieser Liste von Diensten und wählt den Dienst aus, der unter der entsprechenden svchost-Instanz ausgeführt wird.

In Windows 8 wurde die Task-Manager-Oberfläche optimiert, sodass jeder svchost-Eintrag mit einem einzigen Klick auf eine Unterliste der darin ausgeführten Dienste erweitert werden kann.

Der Sysinternals Process Explorer (als kostenloser Download von Microsoft erhältlich) bietet zusätzliche Informationen zu Diensten, die unter svchost.exe- Prozessen ausgeführt werden, wenn der Benutzer die Maus über eine svchost-Instanz im Process Explorer bewegt.

Keines der obigen Verfahren ermöglicht es dem Benutzer zu identifizieren, welcher der mehreren Dienste, die innerhalb einer svchost-Instanz ausgeführt werden, auf eine bestimmte Ressource zugreift, dh auf einen Prozessor, eine Platte, ein Netzwerk oder einen Speicher; der Windows- Ressourcenmonitor berücksichtigt nur (die meisten) diese Ressourcen auf Prozessebene. Es zeigt jedoch die Prozessorauslastung auf Dienstebene auf der Registerkarte "CPU" an. Eine serviceorientierte Liste der geöffneten TCP-Verbindungen und UDP-Ports kann mit dem Befehl netstat -b abgerufen werden .

Um andere Arten von Problemen mit einem Dienst zu beheben, der innerhalb einer svchost-Instanz läuft, müssen die Dienste, von denen vermutet wird, dass sie das Problem verursachen, (alle) neu konfiguriert werden, sodass jeder innerhalb seiner eigenen svchost-Instanz läuft. Zum Beispiel sc config foo type= ownwird der Dienst mit dem Namen "foo" so rekonfiguriert, dass er in seiner eigenen svchost-Instanz ausgeführt wird. Das Ändern des Typs zurück in Shared erfolgt durch einen analogen Befehl. Der Dienst muss neu gestartet werden, damit eine solche Konfigurationsänderung wirksam wird. Dieser Debugging-Prozess ist jedoch nicht narrensicher; In einigen Fällen kann ein Heisenbug auftreten, der dazu führt, dass das Problem verschwindet , wenn der Dienst separat ausgeführt wird.

Eine komplexere Methode zur Fehlerbehebung besteht darin, eine isolierte Dienstgruppe zu erstellen.

In Windows 10 wurde svchost ab Version 1703 von Microsoft so umgestaltet, dass je nach verfügbarem Systemspeicher nur ein Dienst pro Prozess gehostet wird. Die Standardeinstellung bewirkt, dass Dienste unabhängig gehostet werden, wenn das System über mindestens 3,5 GB RAM verfügt.

Siehe auch

Verweise

Weiterlesen

Externe Links