Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Registriert eine Funktion zum Behandeln erweiterter Dienststeuerungsanforderungen.
Syntax
SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerExA(
[in] LPCSTR lpServiceName,
[in] LPHANDLER_FUNCTION_EX lpHandlerProc,
[in, optional] LPVOID lpContext
);
Parameter
[in] lpServiceName
Der Name des Diensts, der vom aufrufenden Thread ausgeführt wird. Dies ist der Dienstname, den das im CreateService--Funktion angegebene Dienststeuerungsprogramm beim Erstellen des Diensts angibt.
[in] lpHandlerProc
Ein Zeiger auf die zu registrierende Handlerfunktion. Weitere Informationen finden Sie unter HandlerEx-.
[in, optional] lpContext
Alle benutzerdefinierten Daten. Dieser Parameter, der an die Handlerfunktion übergeben wird, kann dazu beitragen, den Dienst zu identifizieren, wenn mehrere Dienste einen Prozess gemeinsam nutzen.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Dienststatushandle.
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.
| Rückgabecode | Beschreibung |
|---|---|
|
Nicht genügend Arbeitsspeicher ist verfügbar, um einen ANSI-Zeichenfolgenparameter in Unicode zu konvertieren. Dieser Fehler tritt nicht für Unicode-Zeichenfolgenparameter auf. |
|
Der Diensteintrag wurde falsch angegeben, wenn der Prozess die StartServiceCtrlDispatcher--Funktion aufgerufen hat. |
Bemerkungen
Die ServiceMain--Funktion eines neuen Diensts sollte sofort die RegisterServiceCtrlHandlerEx--Funktion aufrufen, um eine Steuerelementhandlerfunktion beim Steuerelementverteiler zu registrieren. Dadurch kann der Steuerelementverteilungsdienst die angegebene Funktion aufrufen, wenn sie Steuerelementanforderungen für diesen Dienst empfängt. Eine Liste der möglichen Steuerelementcodes finden Sie unter HandlerEx-. Die Threads des aufrufenden Prozesses können das von dieser Funktion zurückgegebene Dienststatushandle verwenden, um den Dienst in nachfolgenden Aufrufen der SetServiceStatus--Funktion zu identifizieren.
Die RegisterServiceCtrlHandlerEx--Funktion muss vor dem ersten SetServiceStatus- aufruf aufgerufen werden, da RegisterServiceCtrlHandlerEx ein Dienststatushandle zurückgibt, damit kein anderer Dienst versehentlich diesen Dienststatusstatus festlegen kann. Darüber hinaus muss der Steuerelementhandler eingerichtet sein, um Steueranforderungen nach dem Zeitpunkt zu empfangen, an dem der Dienst die Steuerelemente angibt, die er über die SetServiceStatus--Funktion akzeptiert.
Wenn die Steuerelementhandlerfunktion mit einer Steuerelementanforderung aufgerufen wird, muss der Dienst SetServiceStatus- aufrufen, um den Status nur dann an den Dienststeuerungs-Manager zu melden, wenn sich der Dienststatus geändert hat, z. B. wenn der Dienst beendete oder herunterfahrende Steuerelemente verarbeitet. Wenn sich der Dienststatus nicht geändert hat, sollte der Dienst den Status nicht an den Dienststeuerungs-Manager melden.
Das Dienststatushandle muss nicht geschlossen werden.
Anmerkung
Der winsvc.h-Header definiert RegisterServiceCtrlHandlerEx als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante 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 |