Freigeben über


EnumDependentServicesA-Funktion (winsvc.h)

Ruft den Namen und den Status der einzelnen Dienste ab, die vom angegebenen Dienst abhängig sind; d. h. der angegebene Dienst muss ausgeführt werden, bevor die abhängigen Dienste ausgeführt werden können.

Syntax

BOOL EnumDependentServicesA(
  [in]            SC_HANDLE              hService,
  [in]            DWORD                  dwServiceState,
  [out, optional] LPENUM_SERVICE_STATUSA lpServices,
  [in]            DWORD                  cbBufSize,
  [out]           LPDWORD                pcbBytesNeeded,
  [out]           LPDWORD                lpServicesReturned
);

Parameter

[in] hService

Ein Handle für den Dienst. Dieses Handle wird von der OpenService-- oder CreateService--Funktion zurückgegeben und muss über das SERVICE_ENUMERATE_DEPENDENTS-Zugriffsrecht verfügen. Weitere Informationen finden Sie unter Service Security and Access Rights.

[in] dwServiceState

Der Status der dienste, die aufgezählt werden sollen. Dieser Parameter kann einer der folgenden Werte sein:

Wert Bedeutung
SERVICE_ACTIVE
0x00000001
Listet Dienste auf, die sich in den folgenden Zuständen befinden: SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDINGund SERVICE_PAUSED.
SERVICE_INACTIVE
0x00000002
Listet Dienste auf, die sich im zustand SERVICE_STOPPED befinden.
SERVICE_STATE_ALL
0x00000003
Kombiniert die folgenden Zustände: SERVICE_ACTIVE und SERVICE_INACTIVE.

[out, optional] lpServices

Ein Zeiger auf ein Array von ENUM_SERVICE_STATUS Strukturen, die die Namen- und Dienststatusinformationen für jeden abhängigen Dienst in der Datenbank empfängt. Der Puffer muss groß genug sein, um die Strukturen sowie die Zeichenfolgen, auf die ihre Member verweisen, zu halten.

Die Reihenfolge der Dienste in diesem Array ist die Umgekehrte der Startreihenfolge der Dienste. Mit anderen Worten, der erste Dienst im Array ist der erste Dienst, der zuletzt gestartet werden würde, und der letzte Dienst im Array ist das, das zuerst gestartet werden würde.

Die maximale Größe dieses Arrays beträgt 64.000 Bytes. Um die erforderliche Größe zu ermitteln, geben Sie NULL- für diesen Parameter und 0 für den cbBufSize Parameter an. Die Funktion schlägt fehl, und GetLastError- wird ERROR_MORE_DATAzurückgegeben. Der pcbBytesNeededed Parameter erhält die erforderliche Größe.

[in] cbBufSize

Die Größe des Puffers, auf den der lpServices Parameter in Byte verweist.

[out] pcbBytesNeeded

Ein Zeiger auf eine Variable, die die Anzahl der Bytes empfängt, die zum Speichern des Arrays von Diensteinträgen erforderlich sind. Die Variable empfängt diesen Wert nur, wenn der Puffer, auf den lpServices verweist, zu klein ist, durch Funktionsfehler und den ERROR_MORE_DATA Fehler angegeben ist; andernfalls sind die Inhalte pcbBytesNeededed nicht definiert.

[out] lpServicesReturned

Ein Zeiger auf eine Variable, die die Anzahl der zurückgegebenen Diensteinträge empfängt.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlschlägt, ist der Rückgabewert null. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.

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
ERROR_ACCESS_DENIED
Das Handle verfügt nicht über das SERVICE_ENUMERATE_DEPENDENTS Zugriffsrecht.
ERROR_INVALID_HANDLE
Der angegebene Handle ist ungültig.
ERROR_INVALID_PARAMETER
Ein angegebener Parameter ist ungültig.
ERROR_MORE_DATA
Der Puffer, auf den lpServices verweist ist nicht groß genug. Die Funktion legt die Variable fest, auf die von lpServicesReturned auf die tatsächliche Anzahl der im Puffer gespeicherten Diensteinträge verweist. Die Funktion legt die Variable fest, auf die pcbBytesNeeded auf die Anzahl der Bytes, die zum Speichern aller Diensteinträge erforderlich sind.

Bemerkungen

Die zurückgegebenen Diensteinträge werden in umgekehrter Reihenfolge der Startreihenfolge sortiert, wobei die Gruppenreihenfolge berücksichtigt wird. Wenn Sie die abhängigen Dienste beenden müssen, können Sie die Reihenfolge der Einträge verwenden, die in den lpServices Puffer geschrieben wurden, um die abhängigen Dienste in der richtigen Reihenfolge zu beenden.

Beispiele

Ein Beispiel finden Sie unter Beenden eines Dienst-.

Anmerkung

Der winsvc.h-Header definiert EnumDependentServices als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP [nur Desktop-Apps]
mindestens unterstützte Server- Windows Server 2003 [Nur Desktop-Apps]
Zielplattform- Fenster
Header- winsvc.h (enthalten Windows.h)
Library Advapi32.lib
DLL- Advapi32.dll

Siehe auch

CreateService-

ENUM_SERVICE_STATUS

EnumServicesStatusEx-

OpenService-

Dienstfunktionen

Dienstinstallations-, Entfernungs- und Enumerations-