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

Die ChangeWMI-Klassenmethode ändert eine Win32_Service.

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 beibehalten. Bei DisplayName-Vergleichen wird immer die Groß-/Kleinschreibung beachtet.

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 Startvorgangs nicht gestartet werden kann. Der Wert gibt die Aktion des Startprogramms an, wenn ein Fehler auftritt. Alle Fehler werden vom System protokolliert.

Ignorieren (0)

Der Benutzer wird nicht benachrichtigt.

Normal (1)

Normal. Der Benutzer wird benachrichtigt.

Schwer (2)

Das System wird mit der letzten guten Konfiguration neu gestartet.

Kritisch (3)

Das System versucht, mit einer fehlerfreien Konfiguration zu neu starten.

StartMode [in]

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

Start

Der Gerätetreiber wurde vom Betriebssystemladeprogramm gestartet. Dieses Wert ist nur für Treiberdienste gültig.

System

Der Gerätetreiber wurde vom Initialisierungsprozess des Betriebssystems gestartet. Dieses Wert ist nur für Treiberdienste gültig.

Automatic

Dienst, der automatisch vom Dienststeuerungs-Manager während des Systemstarts gestartet werden soll.

Manuell

Dienst, der vom Dienststeuerungs-Manager gestartet werden soll, wenn ein Prozess die StartService-Methode aufruft.

Disabled

Dienst, der nicht mehr gestartet werden kann.

DesktopInteract [in]

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

StartName [in]

Kontoname, unter dem der Dienst ausgeführt wird. Je nach Diensttyp kann der Kontoname in Form von Domänenname\Benutzername oder .\Benutzername vorliegen. Der Dienstprozess wird mit einem dieser beiden Formulare protokolliert, wenn er ausgeführt wird. 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 den Startname anzugeben, z. B. Username@DomainName.

StartPassword [in]

Kennwort für den Kontonamen, der durch den StartName-Parameter 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 Lastensortierungsgruppen werden zuerst gestartet, gefolgt von Diensten in Gruppen, die nicht in der Liste der Lastenreihenfolgengruppen enthalten sind, gefolgt von Diensten, die nicht zu einer Gruppe gehören. Die Systemregistrierung verfügt über eine Liste der 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.

Erfolgreich

0

Die Anforderung wurde akzeptiert.

Nicht unterstützt

1

Die Anforderung wird nicht unterstützt.

Zugriff verweigert

2

Der Benutzer hatte nicht den erforderlichen Zugriff.

Abhängige Dienste, die ausgeführt werden

3

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

Ungültiges Dienststeuerelement

4

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

Der Dienst kann die Steuerung nicht akzeptieren.

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.

Dienst nicht aktiv

6

Der Dienst wurde nicht gestartet.

Dienstanforderungstimeout

7

Der Dienst hat auf die Startanforderung nicht rechtzeitig reagiert.

Unbekannter Fehler

8

Unbekannter Fehler beim Starten des Diensts.

Pfad nicht gefunden

9

Der Verzeichnispfad zur ausführbaren Dienstdatei wurde nicht gefunden.

Dienst wird bereits ausgeführt

10

Der Dienst wird schon ausgeführt.

Dienstdatenbank gesperrt

11

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

Dienstabhängigkeit gelöscht

12

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

Dienstabhängigkeitsfehler

13

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

Dienst deaktiviert

14

Der Dienst wurde vom System deaktiviert.

Fehler bei der Dienstanmeldung

15

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

Dienst, der zum Löschen markiert ist

16

Dieser Dienst wird aus dem System entfernt.

Dienst ohne Thread

17

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

Statuskreisabhängigkeit

18

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

Doppelter Name des Status

19

Ein Dienst wird unter demselben Namen ausgeführt.

Status Ungültiger Name

20

Der Dienstname weist ungültige Zeichen auf.

Status Ungültiger Parameter

21

Ungültige Parameter wurden an den Dienst übergeben.

Status Ungültiges Dienstkonto

22

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

Statusdienst vorhanden

23

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

Dienst bereits angehalten

24

Der Dienst ist im System derzeitig angehalten.

Andere

25 4294967295

Bemerkungen

Wenn ein Computer gestartet wird, werden auch alle Autostartdienste gestartet. Gelegentlich kann einer dieser Dienste nicht zusammen mit dem Computer gestartet werden. Wenn ein Dienst während des Systemstarts fehlschlägt, führt der Computer eine Aktion basierend auf dem Wert des Dienstfehlerkontrollcodes aus.

Die meisten Dienste werden mit dem Fehlersteuerungscode Normal installiert. Einige der Ausnahmen, die mit dem Fehlercode 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 beim Dienst gesendet. Wenn Sie die Benachrichtigung auf dem Bildschirm bevorzugen, dass ein Dienst nicht gestartet werden konnte, können Sie WMI verwenden, um den Fehlersteuerungscode zu ändern. Fehlerkontrollcodes gelten nur für den Computerstart; Fehlerkontrollcodes 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 einem Sicherheitsrisiko führen kann, können Sie den Dienst in 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 klasse Win32_Service 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 über das Recht verfügen, 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
Header
Mbnapi.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Siehe auch

Betriebssystemklassen

Win32_Service

WMI-Aufgaben: Dienste