Freigeben über


Change-Methode der Win32_Service-Klasse (Mbnapi.h) – TerminalService

Die Change-WMI-Klassenmethode ändert eine Win32_TerminalService.

In diesem Thema wird MOF-Syntax (Managed Object Format) verwendet. Weitere Informationen zur Verwendung dieser Methode finden Sie unter Aufrufen einer Methode.

Syntax

uint32 Change(
  [in] string  DisplayName,
  [in] string  PathName,
  [in] uint32  ServiceType,
  [in] uint32  ErrorControl,
  [in] string  StartMode,
  [in] boolean DesktopInteract,
  [in] string  StartName,
  [in] string  StartPassword,
  [in] string  LoadOrderGroup,
  [in] string  LoadOrderGroupDependencies,
  [in] string  ServiceDependencies
);

Parameter

DisplayName [in]

Der Anzeigename des Diensts Die maximale Länge der Zeichenfolge beträgt 256 Zeichen. Der Name wird im Dienststeuerungs-Manager in Groß-/Kleinschreibung beibehalten. Bei DisplayName-Vergleichen wird immer zwischen Groß-/Kleinschreibung unterschieden.

Einschränkungen: Akzeptiert denselben Wert wie die Name-Eigenschaft .

Beispiel: "Atdisk".

PathName [in]

Der vollqualifizierte Pfad zur ausführbaren Datei, die den Dienst implementiert, z. B. "\SystemRoot\System32\drivers\afd.sys".

ServiceType [in]

Der Typ der Dienste, die für Prozesse bereitgestellt werden, die sie aufrufen.

1 (0x1)

Kerneltreiber

2 (0x2)

Dateisystemtreiber

4 (0x4)

Adapter

8 (0x8)

Erkennungstreiber

16 (0x10)

Eigener Prozess

32 (0x20)

Freigabeprozess

256 (0x100)

Interaktiver Prozess

ErrorControl [in]

Schweregrad des Fehlers, wenn dieser Dienst während des Starts nicht gestartet werden kann. Der Wert gibt die Aktion an, die vom Startprogramm ausgeführt wird, wenn ein Fehler auftritt. Alle Fehler werden vom System protokolliert.

0

Ignore (Ignorieren): Der Start wird fortgesetzt. Der Benutzer erhält keine Benachrichtigung, dass der Dienst fehlgeschlagen ist.

1

Normal. Der Start wird fortgesetzt. Bevor sich der Benutzer anmeldet, erhält der Benutzer die Benachrichtigung"Mindestens ein Dienst oder Gerät ist beim Start fehlgeschlagen."

2

Schwere. Der Computer versucht, mit der zuletzt bekannten guten Konfiguration neu zu starten. Wenn der Dienst erneut fehlschlägt, wird der Start fortgesetzt, und der Benutzer wird benachrichtigt.

3

Kritisch. Der Computer versucht, mit der zuletzt bekannten guten Konfiguration neu zu starten. Wenn der Dienst erneut fehlschlägt, wird der Start beendet.

StartMode [in]

Startmodus des Windows-Basisdiensts. Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

Booten

Gerätetreiber, der vom Betriebssystemladeprogramm gestartet wird.

System

Gerätetreiber, der vom Initialisierungsprozess des Betriebssystems gestartet wird. Dieses Wert ist nur für Treiberdienste gültig.

Automatisch

Der Dienst wird während des Systemstarts automatisch vom Dienststeuerungs-Manager gestartet. Autostartdienste werden gestartet, bevor sich ein Benutzer beim Computer anmeldet und ausgeführt wird, auch wenn sich kein Benutzer am Computer anmeldet.

Manuell

Dienst, der vom Dienststeuerungs-Manager gestartet werden soll, wenn ein Prozess die StartService-Methode aufruft. Obwohl manuelle Dienste speziell von einem Benutzer (oder einem Skript) gestartet werden müssen, werden sie weiterhin ausgeführt, auch wenn sich der Benutzer abmeldet. Manuelle Dienste werden häufig als On-Demand-Dienste bezeichnet.

Deaktiviert

Dienst, der nicht mehr gestartet werden kann. Um einen deaktivierten Dienst zu starten, müssen Sie zuerst die Startoption in Auto oder Manuell ändern.

DesktopInteract [in]

True gibt an, dass der Dienst ein Fenster auf dem Desktop erstellen oder mit diesem kommunizieren kann.

StartName [in]

Kontoname, unter dem der Dienst ausgeführt wird. Je nach Diensttyp kann der Kontoname in der Form "Domänenname\Benutzername" oder ".\Username" vorliegen. Der Dienstprozess wird bei der Ausführung mit einem dieser beiden Formulare protokolliert. Wenn das Konto zur integrierten Domäne gehört, kann .\Username angegeben werden. Wenn NULL angegeben ist, wird der Dienst als LocalSystem-Konto angemeldet. Bei Treibern auf Kernel- oder Systemebene enthält StartName den Treiberobjektnamen (d. h. \FileSystem\Rdr oder \Driver\Xns), den das Eingabe- und Ausgabesystem (E/A) zum Laden des Gerätetreibers verwendet. Wenn NULL angegeben ist, wird der Treiber mit einem Standardobjektnamen ausgeführt, der vom E/A-System basierend auf dem Dienstnamen erstellt wird, z. B. "DWDOM\Admin".

Sie können auch das UpN-Format (User Principal Name) verwenden, um startName anzugeben, z. B. Username@DomainName.

StartPassword [in]

Kennwort für den Kontonamen, der durch den Parameter StartName angegeben wird. Geben Sie NULL an, wenn Sie das Kennwort nicht ändern. Geben Sie eine leere Zeichenfolge an, wenn der Dienst kein Kennwort besitzt.

Hinweis

Wenn Sie einen Dienst von einem lokalen System in ein Netzwerk oder von einem Netzwerk in ein lokales System ändern, muss StartPassword eine leere Zeichenfolge ("") und nicht NULL sein.

LoadOrderGroup [in]

Gruppenname, dem sie zugeordnet ist. Ladereihenfolgegruppen sind in der Systemregistrierung enthalten und bestimmen die Reihenfolge, in der Dienste in das Betriebssystem geladen werden. Wenn der Zeiger NULL ist oder auf eine leere Zeichenfolge zeigt, gehört der Dienst nicht zu einer Gruppe. Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

Abhängigkeiten zwischen Gruppen sollten im Parameter LoadOrderGroupDependencies aufgeführt werden. Dienste in der Liste der Lastenreihenfolgen werden zuerst gestartet, gefolgt von Diensten in Gruppen, die nicht in der Liste der Lastenreihenfolgengruppe enthalten sind, gefolgt von Diensten, die nicht zu einer Gruppe gehören. Die Systemregistrierung enthält eine Liste von Ladereihenfolgegruppen unter:

HKEY_LOCAL_MACHINE\System\Currentcontrolset\Steuerung\ServiceGroupOrder

LoadOrderGroupDependencies [in]

Liste der Lastenreihenfolgegruppen, die gestartet werden müssen, bevor dieser Dienst gestartet wird. Das Array ist doppelt NULL-beendet. Wenn der Zeiger NULL ist oder auf eine leere Zeichenfolge zeigt, weist der Dienst keine Abhängigkeiten auf. Gruppennamen müssen durch das SC_GROUP_IDENTIFIER (definiert in der Datei Winsvc.h) vorangestellt werden, um sie von Dienstnamen zu unterscheiden, da Dienste und Dienstgruppen denselben Namespace verwenden. Abhängigkeit von einer Gruppe bedeutet, dass dieser Dienst ausgeführt werden kann, wenn nach dem Versuch, alle Mitglieder der Gruppe zu starten, mindestens ein Mitglied der Gruppe ausgeführt wird.

ServiceDependencies [in]

Liste, die die Namen der Dienste enthält, die gestartet werden müssen, bevor dieser Dienst gestartet wird. Das Array ist doppelt NULL-beendet. Wenn der Zeiger NULL ist oder auf eine leere Zeichenfolge zeigt, weist der Dienst keine Abhängigkeiten auf. Die Abhängigkeit von einem Dienst gibt an, dass dieser Dienst nur ausgeführt werden kann, wenn der Dienst, von dem er abhängig ist, ausgeführt wird.

Rückgabewert

Gibt einen der in der folgenden Liste aufgeführten Werte oder einen anderen Wert zurück, um einen Fehler anzugeben. Weitere Fehlercodes finden Sie unter WMI-Fehlerkonstanten oder WbemErrorEnum. Allgemeine HRESULT-Werte finden Sie unter Systemfehlercodes.

0

Die Anforderung wurde akzeptiert.

1

Die Anforderung wird nicht unterstützt.

2

Der Benutzer hatte nicht den erforderlichen Zugriff.

3

Der Dienst kann nicht beendet werden, da andere ausgeführte Dienste davon abhängig sind.

4

Der angeforderte Steuerungscode ist nicht gültig, oder es ist für den Dienst nicht akzeptabel.

5

Der angeforderte Steuerungscode kann nicht an den Dienst gesendet werden, da der Status des Diensts (Win32_BaseService. State-Eigenschaft ) ist gleich 0, 1 oder 2.

6

Der Dienst wurde nicht gestartet.

7

Der Dienst hat auf die Startanforderung nicht rechtzeitig reagiert.

8

Unbekannter Fehler beim Starten des Diensts.

9

Der Verzeichnispfad zur ausführbaren Datei des Diensts wurde nicht gefunden.

10

Der Dienst wird schon ausgeführt.

11

Die Datenbank zum Hinzufügen eines neuen Diensts ist gesperrt.

12

Eine Abhängigkeit, auf der sich dieser Dienst stützt, wurde aus dem System entfernt.

13

Der Dienst hat den Dienst nicht gefunden, der von einem abhängigen Dienst benötigt wird.

14

Der Dienst wurde vom System deaktiviert.

15

Der Dienst hat nicht die richtige Authentifizierung, um im System ausgeführt zu werden.

16

Dieser Dienst wird aus dem System entfernt.

17

Der Dienst verfügt über keinen Ausführungsthread.

18

Der Dienst verfügt beim Starten über zirkuläre Abhängigkeiten.

19

Ein Dienst wird unter demselben Namen ausgeführt.

20

Der Dienstname weist ungültige Zeichen auf.

21

Ungültige Parameter wurden an den Dienst übergeben.

22

Das Konto, unter dem dieser Dienst ausgeführt wird, ist entweder ungültig oder es fehlen die Berechtigungen zum Ausführen des Diensts.

23

Der Dienst ist in der Datenbank der im System verfügbaren Dienste vorhanden.

24

Der Dienst ist im System derzeitig angehalten.

Bemerkungen

Wenn ein Computer gestartet wird, werden auch alle Autostartdienste gestartet. Manchmal kann einer dieser Dienste nicht zusammen mit dem Computer gestartet werden. Wenn ein Dienst während des Systemstarts ausfällt, führt der Computer aktionen basierend auf dem Wert des Dienstfehlerkontrollcodes aus.

Die meisten Dienste werden mithilfe des Fehlersteuerungscodes Normal installiert. Einige der Ausnahmen, die mithilfe des Fehlercodes Ignorieren installiert werden, sind:

  • Dateireplikationsdienst
  • Smartcard
  • Sekundäre Anmeldung
  • WMI

Für die Dienste, die mithilfe des Fehlercodes ignorieren installiert wurden, wird dem Benutzer keine Benachrichtigung über einen Fehler des Diensts gesendet. Wenn Sie eine Bildschirmbenachrichtigung bevorzugen, dass ein Dienst nicht gestartet werden konnte, können Sie WMI verwenden, um den Fehlersteuerungscode zu ändern. Fehlersteuerungscodes gelten nur für den Computerstart. Fehlersteuerungscodes werden nicht verwendet, wenn Sie einen Dienst beenden und dann versuchen, einen Dienst neu zu starten, nachdem der Computer ausgeführt wird.

Gelegentlich müssen Sie möglicherweise das Konto ändern, unter dem ein bestimmter Dienst ausgeführt wird. Beispielsweise können Sie einen Dienst unter einem Administratorkonto ausführen. Da dies zu einer Sicherheitslücke führen kann, können Sie den Dienst auf ein Konto mit weniger Berechtigungen umstellen. Alternativ können Dienste unter einem Konto ausgeführt werden, das gerade gelöscht werden soll, oder Sie möchten sicherstellen, dass bestimmte Dienste auf allen Ihren Servern unter bestimmten Konten ausgeführt werden. Sie können die Change-Methode der Win32_TerminalService-Klasse verwenden, um Dienste für die Ausführung unter einem angegebenen Benutzerkonto zu konfigurieren. Beachten Sie bei der Auswahl eines Kontos Folgendes:

  • Das Konto, das als Dienstkonto verwendet wird, muss das Recht haben, sich als Dienst anzumelden. Dieses Recht kann mithilfe von Gruppenrichtlinie gewährt werden.

  • Das Konto, das als Dienstkonto verwendet wird, sollte kein Mitglied einer lokalen Gruppe, einer Domäne oder einer Unternehmensadministratorgruppe sein.

  • Jede instance eines Diensts sollte unter einem eindeutigen Benutzerkonto ausgeführt werden. Dies bietet zusätzliche Sicherheit und ermöglicht die Überwachung einzelner Dienstinstanzen.

  • Wenn der Dienst interaktiv ist, muss der Dienst unter dem Konto LocalSystem ausgeführt werden.

    LocalSystem ist erforderlich, da nur eine Fensterstation (WinSta0) gleichzeitig sichtbar und interaktiv sein kann. Wenn ein Dienst unter einem anderen Konto als LocalSystem ausgeführt wird, wird er in der Fensterstation Service-0x03e7$\Default ausgeführt, die ein unsichtbares Fenster ist. Dienste, die in dieser Fensterstation ausgeführt werden, können keine Eingabe- oder Anzeigeausgabe empfangen.

Wenn Sie einem Dienst ein Konto zuweisen, benötigt der SCM das richtige Kennwort für dieses Konto, bevor er die Zuweisung vornimmt. Wenn Sie ein falsches Kennwort angeben, lehnt der SCM das Konto ab. Wenn Sie ein Dienstkonto mit dem LocalSystem-, LocalService- oder NetworkService-Konto konfigurieren, müssen Sie kein Kontokennwort angeben, da diese Konten über keine Kennwörter verfügen.

Das SCM speichert das Kontokennwort in der Dienstdatenbank. Nachdem das Kennwort zugewiesen wurde, stellt der SCM jedoch nicht sicher, dass das in der Dienstdatenbank gespeicherte Kennwort und das dem Benutzerkonto in Active Directory zugewiesene Kennwort weiterhin übereinstimmen. Folglich könnte eine Situation ähnlich der folgenden auftreten:

  • . Sie konfigurieren einen Dienst für die Ausführung unter einem bestimmten Benutzerkonto.
  • Der Dienst wird unter diesem Konto mithilfe des aktuellen Kontokennworts gestartet.
  • Sie ändern das Kennwort für das Benutzerkonto.
  • Der Dienst wird weiterhin ausgeführt. Wenn der Dienst jedoch beendet wird, können Sie ihn nicht neu starten, da der SCM weiterhin das alte ungültige Kennwort verwendet. Das Ändern des Kennworts in Active Directory ändert das in der Dienstdatenbank gespeicherte Kennwort nicht.

Wenn Sie Dienste unter regulären Benutzerkonten ausführen, müssen Sie diese Dienstkennwörter bei jeder Änderung des Benutzerkontokennworts aktualisieren. Dies kann besonders zeitaufwändig sein, wenn Sie nicht sicher sind, welche Dienste unter diesem Konto ausgeführt werden oder auf welchen Computern Dienste unter diesem Konto ausgeführt werden. Glücklicherweise können Sie WMI verwenden, um die Dienstkonten auf all Ihren Computern zu überprüfen und bei Bedarf das Kennwort des Dienstkontos zu ändern.

Der parameter Win32_LoadOrderGroup stellt eine Gruppe von Systemdiensten dar, die Ausführungsabhängigkeiten definieren. Die Dienste müssen in der von der Load Order Group angegebenen Reihenfolge initiiert werden, da die Dienste voneinander abhängig sind. Für diese abhängigen Dienste ist das Vorhandensein der vorerzeugten Dienste erforderlich, um ordnungsgemäß zu funktionieren.

Um einen Dienst von einem Netzwerkdienst in ein lokales System zu ändern, sollten die Parameter StartName und StartPassword die folgenden Werte aufweisen:

StartName = "LocalSystem"
StartPassword = "" // - empty string, not NULL

Um einen Dienst von einem lokalen Systemdienst in ein Netzwerk zu ändern, sollten die Parameter StartName und StartPassword die folgenden Werte aufweisen:

StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL

Beispiele

Das folgende VBScript ändert das Dienstkonto für Dienste von der Ausführung unter einem angegebenen Benutzerkonto in LocalSystem.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objService in colServices
 errServiceChange = objService.Change _
 ( , , , , , , ".\LocalSystem" , "")
Next

Das folgende VBScript ändert das Dienstkontokennwort für alle Skripts, die unter Netsvc ausgeführt werden.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objservice in colServiceList
 errReturn = objService.Change( , , , , , , , "password")
Next

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
WindowsServer 2008
Namespace
Root\CIMv2\TerminalServices
Header
Mbnapi.h
MOF
TSCfgWmi.mof
DLL
TSCfgWmi.dll

Siehe auch

Win32_Service

Betriebssystemklassen

Win32_TerminalService

WMI-Aufgaben: Dienste