ChangeServiceConfigA-Funktion (winsvc.h)
Ändert die Konfigurationsparameter eines Diensts.
Verwenden Sie die Funktion ChangeServiceConfig2 , um die optionalen Konfigurationsparameter zu ändern.
Syntax
BOOL ChangeServiceConfigA(
[in] SC_HANDLE hService,
[in] DWORD dwServiceType,
[in] DWORD dwStartType,
[in] DWORD dwErrorControl,
[in, optional] LPCSTR lpBinaryPathName,
[in, optional] LPCSTR lpLoadOrderGroup,
[out, optional] LPDWORD lpdwTagId,
[in, optional] LPCSTR lpDependencies,
[in, optional] LPCSTR lpServiceStartName,
[in, optional] LPCSTR lpPassword,
[in, optional] LPCSTR lpDisplayName
);
Parameter
[in] hService
Ein Handle für den Dienst. Dieses Handle wird von der OpenService- oder CreateService-Funktion zurückgegeben und muss über das zugriffsrecht SERVICE_CHANGE_CONFIG verfügen. Weitere Informationen finden Sie unter Dienstsicherheit und Zugriffsrechte.
[in] dwServiceType
Der Diensttyp. Geben Sie SERVICE_NO_CHANGE an, wenn Sie den vorhandenen Diensttyp nicht ändern. Geben Sie andernfalls einen der folgenden Diensttypen an.
Wenn Sie entweder SERVICE_WIN32_OWN_PROCESS oder SERVICE_WIN32_SHARE_PROCESS angeben und der Dienst im Kontext des LocalSystem-Kontos ausgeführt wird, können Sie auch den folgenden Typ angeben.
Wert | Bedeutung |
---|---|
|
Der Dienst kann mit dem Desktop interagieren.
Weitere Informationen finden Sie unter Interaktive Dienste. |
[in] dwStartType
Die Startoptionen des Diensts. Geben Sie SERVICE_NO_CHANGE an, wenn Sie den vorhandenen Starttyp nicht ändern. Geben Sie andernfalls einen der folgenden Werte an.
Wert | Bedeutung |
---|---|
|
Ein Dienst, der während des Systemstarts automatisch vom Dienststeuerungs-Manager gestartet wird. |
|
Ein Gerätetreiber, der vom Systemladeprogramm gestartet wurde. Dieses Wert ist nur für Treiberdienste gültig. |
|
Ein Dienst, der vom Dienststeuerungs-Manager gestartet wird, wenn ein Prozess die StartService-Funktion aufruft. |
|
Ein Dienst, der nicht gestartet werden kann. Versuche, den Dienst zu starten, führen dazu, dass der Fehlercode ERROR_SERVICE_DISABLED. |
|
Ein Gerätetreiber, der von der IoInitSystem-Funktion gestartet wurde. Dieses Wert ist nur für Treiberdienste gültig. |
[in] dwErrorControl
Der Schweregrad des Fehlers und der ausgeführten Aktion, wenn dieser Dienst nicht gestartet werden kann. Geben Sie SERVICE_NO_CHANGE an, wenn Sie die vorhandene Fehlersteuerung nicht ändern. Geben Sie andernfalls einen der folgenden Werte an.
[in, optional] lpBinaryPathName
Der vollqualifizierte Pfad zur Binärdatei des Diensts. Geben Sie NULL an, wenn Sie den vorhandenen Pfad nicht ändern. Wenn der Pfad ein Leerzeichen enthält, muss er in Anführungszeichen gesetzt werden, damit er ordnungsgemäß interpretiert wird. Beispielsweise sollte "d:\my share\myservice.exe" als "d:\my share\myservice.exe" angegeben werden.
Der Pfad kann auch Argumente für einen Dienst mit automatischem Start enthalten. Beispiel: "d:\myshare\myservice.exe arg1 arg2". Diese Argumente werden an den Diensteinstiegspunkt (in der Regel die Standard-Funktion) übergeben.
Wenn Sie einen Pfad auf einem anderen Computer angeben, muss für das Computerkonto des lokalen Computers auf die Freigabe zugegriffen werden, da dies der Sicherheitskontext ist, der im Remoteaufruf verwendet wird. Diese Anforderung ermöglicht jedoch, dass sich potenzielle Sicherheitsrisiken auf dem Remotecomputer auf den lokalen Computer auswirken. Daher ist es am besten, eine lokale Datei zu verwenden.
[in, optional] lpLoadOrderGroup
Der Name der Ladereihenfolgegruppe, der dieser Dienst angehört. Geben Sie NULL an, wenn Sie die vorhandene Gruppe nicht ändern. Geben Sie eine leere Zeichenfolge an, wenn der Dienst nicht zu einer Gruppe gehört.
Das Startprogramm verwendet Ladereihenfolgegruppen, um Gruppen von Diensten in einer angegebenen Reihenfolge in Bezug auf die anderen Gruppen zu laden. Die Liste der Lastreihenfolgegruppen ist im ServiceGroupOrder-Wert des folgenden Registrierungsschlüssels enthalten:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
[out, optional] lpdwTagId
Ein Zeiger auf eine Variable, die einen Tagwert empfängt, der in der gruppe eindeutig ist, die im parameter lpLoadOrderGroup angegeben ist. Geben Sie NULL an, wenn Sie das vorhandene Tag nicht ändern.
Sie können ein Tag zum Bestellvorgang des Dienststarts innerhalb einer Ladereihenfolgegruppe verwenden, indem Sie einen Tagreihenfolgevektor im GroupOrderList-Wert des folgenden Registrierungsschlüssels angeben:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
Tags werden nur für Treiberdienste ausgewertet, die über SERVICE_BOOT_START - oder SERVICE_SYSTEM_START Starttypen verfügen.
[in, optional] lpDependencies
Ein Zeiger auf ein doppeltes NULL-beendetes Array mit null getrennten Namen von Diensten oder Lastenreihenfolgegruppen, die das System starten muss, bevor dieser Dienst gestartet werden kann. (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.) Geben Sie NULL an, wenn Sie die vorhandenen Abhängigkeiten nicht ändern. Geben Sie eine leere Zeichenfolge an, wenn der Dienst keine Abhängigkeiten aufweist.
Sie müssen Gruppennamen SC_GROUP_IDENTIFIER voranstellen, damit sie von einem Dienstnamen unterschieden werden können, da Dienste und Dienstgruppen denselben Namensraum gemeinsam nutzen.
[in, optional] lpServiceStartName
Der Name des Kontos, unter dem der Dienst ausgeführt werden soll. Geben Sie NULL an, wenn Sie den vorhandenen Kontonamen nicht ändern. Wenn der Diensttyp SERVICE_WIN32_OWN_PROCESS ist, verwenden Sie einen Kontonamen im Format Domänenname\Benutzername. Der Dienstprozess wird als dieser Benutzer angemeldet. Wenn das Konto zur integrierten Domäne gehört, können Sie .\UserName angeben (beachten Sie, dass die entsprechende C/C++-Zeichenfolge ".\\UserName" lautet). Weitere Informationen finden Sie unter Dienstbenutzerkonten und die Warnung im Abschnitt Hinweise.
Ein freigegebener Prozess kann wie ein beliebiger Benutzer ausgeführt werden.
Wenn der Diensttyp SERVICE_KERNEL_DRIVER oder SERVICE_FILE_SYSTEM_DRIVER ist, ist der Name der Treiberobjektname, den das System zum Laden des Gerätetreibers verwendet. Geben Sie NULL an, wenn der Treiber einen Standardobjektnamen verwenden soll, der vom E/A-System erstellt wurde.
Ein Dienst kann für die Verwendung eines verwalteten Kontos oder eines virtuellen Kontos konfiguriert werden. Wenn der Dienst für die Verwendung eines verwalteten Dienstkontos konfiguriert ist, entspricht der Name dem Namen des verwalteten Dienstkontos. Wenn der Dienst für die Verwendung eines virtuellen Kontos konfiguriert ist, geben Sie den Namen als NT SERVICE\ServiceName an. Weitere Informationen zu verwalteten Dienstkonten und virtuellen Konten finden Sie in der Schrittweisen Anleitung zu Dienstkonten.
Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Verwaltete Dienstkonten und virtuelle Konten werden erst unter Windows 7 und Windows Server 2008 R2 unterstützt.
[in, optional] lpPassword
Das Kennwort für den Kontonamen, der durch den lpServiceStartName-Parameter angegeben wird. Geben Sie NULL an, wenn Sie das vorhandene Kennwort nicht ändern. Geben Sie eine leere Zeichenfolge an, wenn das Konto über kein Kennwort verfügt oder der Dienst im LocalService-, NetworkService- oder LocalSystem-Konto ausgeführt wird. Weitere Informationen finden Sie unter Diensteintragsliste.
Wenn der durch den lpServiceStartName-Parameter angegebene Kontoname der Name eines verwalteten Dienstkontos oder virtuellen Kontonamens ist, muss der lpPassword-ParameterNULL sein.
Kennwörter werden für Treiberdienste ignoriert.
[in, optional] lpDisplayName
Der Anzeigename, der von Anwendungen verwendet werden soll, um den Dienst für seine Benutzer zu identifizieren. Geben Sie NULL an, wenn Sie den vorhandenen Anzeigenamen nicht ändern. Andernfalls hat diese Zeichenfolge eine maximale Länge von 256 Zeichen. Der Name wird im Dienststeuerungs-Manager in Groß-/Kleinschreibung beibehalten. Bei Anzeigenamenvergleichen wird immer zwischen Groß- und Kleinschreibung unterschieden.
Dieser Parameter kann eine lokalisierte Zeichenfolge im folgenden Format angeben:
@[Path]dllname,-strID
Die Zeichenfolge mit dem Bezeichner strID wird aus dllname geladen. der Pfad ist optional. Weitere Informationen finden Sie unter RegLoadMUIString.
Windows Server 2003 und Windows XP: Lokalisierte Zeichenfolgen werden erst unter Windows Vista unterstützt.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.
Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Die folgenden Fehlercodes können vom Dienststeuerungs-Manager festgelegt werden. Andere Fehlercodes können von den Registrierungsfunktionen festgelegt werden, die vom Dienststeuerungs-Manager aufgerufen werden.
Rückgabecode | Beschreibung |
---|---|
|
Das Handle verfügt nicht über das Zugriffsrecht SERVICE_CHANGE_CONFIG . |
|
Es wurde eine Zirkeldienstabhängigkeit angegeben. |
|
Der Anzeigename ist bereits in der Service Controller Manager-Datenbank vorhanden, entweder als Dienstname oder als anderer Anzeigename. |
|
Das angegebene Handle ist ungültig. |
|
Ein parameter, der angegeben wurde, ist ungültig. |
|
Der Kontoname ist nicht vorhanden, oder es wird ein Dienst angegeben, der dieselbe Binärdatei wie ein bereits installierter Dienst verwendet, jedoch mit einem Kontonamen, der nicht mit dem installierten Dienst identisch ist. |
|
Der Dienst wurde zum Löschen markiert. |
Hinweise
Die ChangeServiceConfig-Funktion ändert die Konfigurationsinformationen für den angegebenen Dienst in der Dienststeuerungs-Manager-Datenbank. Sie können die aktuellen Konfigurationsinformationen mithilfe der QueryServiceConfig-Funktion abrufen.
Wenn die Konfiguration für einen Dienst geändert wird, der ausgeführt wird( mit Ausnahme von lpDisplayName), werden die Änderungen erst wirksam, wenn der Dienst beendet wird. Verwenden Sie die LsaCallAuthenticationPackage-Funktion , um die Anmeldeinformationen zu aktualisieren, ohne den Dienst neu starten zu müssen.
Sicherheitsbemerkungen
Durch Festlegen des lpServiceStartName-Parameters wird das Anmeldekonto des Diensts geändert. Dies kann zu Problemen führen. Wenn Sie einen Dienstprinzipalnamen (Service Principal Name, SPN) registriert haben, wird dieser jetzt im falschen Konto registriert. Wenn Sie einen ACE verwendet haben, um Zugriff auf einen Dienst zu gewähren, würde dieser jetzt Zugriff auf das falsche Konto gewähren.Beispiele
Ein Beispiel finden Sie unter Ändern der Konfiguration eines Diensts.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winsvc.h (windows.h einschließen) |
Bibliothek | Advapi32.lib |
DLL | Advapi32.dll |
Weitere Informationen
QueryServiceDynamicInformation