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 |
|
MOF |
|
DLL |
|