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

Die Change WMI-Klassenmethode ändert einen Win32-Dienst. _

In diesem Thema wird die 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 die Groß-/Kleinschreibung immer nicht beachtet.

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

Beispiel: "Atdisk".

PathName [ In]

Der vollqualifizierte Pfad zur ausführbaren Datei, die den Dienst implementiert, z. B. \ "SystemRoot \ System32-Treiber \ \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.

Ignorieren (0)

Der Benutzer wird nicht benachrichtigt.

Normal (1)

Normal. Der Benutzer wird benachrichtigt.

Schwerwiegend (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 "Hinweise".

Start

Vom Betriebssystemladeprogramm gestarteter Gerätetreiber. Dieses Wert ist nur für Treiberdienste gültig.

System

Der Vom Initialisierungsprozess des Betriebssystems gestartete Gerätetreiber. Dieses Wert ist nur für Treiberdienste gültig.

Automatic

Der Dienst wird während des Systemstarts automatisch vom Dienststeuerungs-Manager gestartet.

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]

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 form von DomainName \ Username oder lauten. \ Nutzername. Der Dienstprozess wird bei der Ausführung in einer dieser beiden Formen protokolliert. Wenn das Konto zur integrierten Domäne gehört, . \ Der Benutzername kann angegeben werden. Wenn NULL angegeben wird, wird der Dienst als LocalSystem-Konto angemeldet. Für Kernel- oder Treiber auf Systemebene enthält StartName den Namen des Treiberobjekts (d.h. \ FileSystem \ Rdr oder \ Driver \ Xns), den das E/A-System zum Laden des Gerätetreibers verwendet. Wenn NULL angegeben wird, 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. Username@DomainName B. .

StartPassword [ In]

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

Hinweis

Beim Ändern eines Diensts von einem lokalen System in ein Netzwerk oder von einem Netzwerk in ein lokales System muss StartPassword eine leere Zeichenfolge ("") und nicht NULL sein.

LoadOrderGroup [ In]

Gruppenname, dem er zugeordnet ist. Ladereihenfolgengruppen 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 "Hinweise".

Abhängigkeiten zwischen Gruppen sollten im LoadOrderGroupDependencies-Parameter aufgeführt werden. Dienste in der Liste der Ladereihenfolgegruppen werden zuerst gestartet, gefolgt von Diensten in Gruppen, die nicht in der Liste der Lastenreihenfolgegruppen enthalten sind, gefolgt von Diensten, die keiner Gruppe angehören. Die Systemregistrierung verfügt über eine Liste der Lastreihenfolgegruppen unter:

HKEY _ LOCAL _ MACHINE \ System \ CurrentControlSet \ Control \ ServiceGroupOrder

LoadOrderGroupDependencies [ In]

Liste der Lastreihenfolgegruppen, die gestartet werden müssen, bevor dieser Dienst gestartet wird. Das Array ist doppelt NULL-terminiert. Wenn der Zeiger NULL ist oder auf eine leere Zeichenfolge zeigt, weist der Dienst keine Abhängigkeiten auf. Gruppennamen muss das Zeichen SC GROUP _ _ IDENTIFIER (definiert in der Datei Winsvc.h) vorangestellt sein, 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 mindestens ein Mitglied der Gruppe ausgeführt wird, nachdem versucht wurde, alle Mitglieder der Gruppe zu starten.

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-terminiert. 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ängt, 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.

Ausgeführte abhängige Dienste

3

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

Ungültige Dienststeuerung

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 Zustand des Diensts (Win32 _ BaseService ) ist.State-Eigenschaft) ist gleich 0, 1 oder 2.

Dienst nicht aktiv

6

Der Dienst wurde nicht gestartet.

Timeout für Dienstanforderungen

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, von der dieser Dienst abhängig ist, 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.

Dienstanmeldung fehlgeschlagen

15

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

Dienst zum Löschen markiert

16

Dieser Dienst wird aus dem System entfernt.

Dienst kein 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 enthält ungültige Zeichen.

Ungültiger Statusparameter

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 wurde 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 ausfällt, führt der Computer aktionen basierend auf dem Wert des Dienstfehlersteuerungscodes aus.

Die meisten Dienste werden mithilfe des Codes für die normale Fehlersteuerung installiert. Zu den Ausnahmen, die mit dem Fehlercode Ignorieren installiert werden, gehören:

  • Dateireplikationsdienst
  • Smartcard
  • Sekundäre Anmeldung
  • WMI

Für die Dienste, die mit dem Fehlercode Ignorieren installiert wurden, wird dem Benutzer keine Benachrichtigung angezeigt, dass der Dienst fehlgeschlagen ist. Wenn Sie die Benachrichtigung auf dem Bildschirm bevorzugen, dass ein Dienst nicht gestartet werden konnte, können Sie den Fehlersteuerungscode mithilfe von WMI ä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 angegebener 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 auf ein Konto mit weniger Berechtigungen umschalten. Alternativ können Dienste unter einem Konto ausgeführt werden, das gelöscht werden soll, oder Sie möchten sicherstellen, dass bestimmte Dienste auf allen Servern unter bestimmten Konten ausgeführt werden. Sie können die Change-Methode der Win32-Dienstklasse _ verwenden, um Dienste so zu konfigurieren, dass sie unter einem angegebenen Benutzerkonto ausgeführt werden. Beachten Sie bei der Auswahl eines Kontos Folgendes:

  • Das konto, das als Dienstkonto verwendet wird, muss über das Recht verfügen, sich als Dienst anmelden zu können. Dieses Recht kann mithilfe von Gruppenrichtlinie.

  • Das konto, das als Dienstkonto verwendet wird, darf kein Mitglied einer lokalen, Domänen- oder Unternehmensadministratorgruppe sein.

  • Jede Instanz 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 LocalSystem-Konto ausgeführt werden.

    LocalSystem ist erforderlich, da jeweils nur eine Fensterstation (WinSta0) sichtbar und interaktiv sein kann. Wenn ein Dienst unter einem anderen Konto als LocalSystem ausgeführt wird, wird er in der Service-0x03e7$ \ Standardfensterstation ausgeführt, bei der es sich um ein unsichtbares Fenster handelt. 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 eingeben, lehnt der SCM das Konto ab. Wenn Sie ein Dienstkonto mit dem Konto LocalSystem, LocalService oder NetworkService konfigurieren, müssen Sie kein Kontokennwort angeben, da diese Konten keine Kennwörter besitzen.

Der 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 kann 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 mit dem aktuellen Kontokennwort 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. Durch das Ändern des Kennworts in Active Directory wird das in der Dienstdatenbank gespeicherte Kennwort nicht geändert.

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 allen Ihren Computern zu überprüfen und ggf. das Kennwort für das Dienstkonto zu ändern.

Der Win32 _ LoadOrderGroup-Parameter 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. Diese abhängigen Dienste erfordern, dass die Vorgängerdienste vorhanden sind, damit sie ordnungsgemäß 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

Mit dem folgenden VBScript-Code wird das Dienstkonto für Dienste von unter einem angegebenen Benutzerkonto in LocalSystem geändert.

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

Der folgende VBScript-Code ä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

Requirements (Anforderungen)

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
Windows Server 2008
Namespace
Stamm \ CIMV2
Header
Mbnapi.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Weitere Informationen

Betriebssystemklassen

_Win32-Dienst

WMI-Aufgaben: Dienste