Freigeben über


RegisterServiceCtrlHandlerExA-Funktion (winsvc.h)

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
ERROR_NOT_ENOUGH_MEMORY
Nicht genügend Arbeitsspeicher ist verfügbar, um einen ANSI-Zeichenfolgenparameter in Unicode zu konvertieren. Dieser Fehler tritt nicht für Unicode-Zeichenfolgenparameter auf.
ERROR_SERVICE_NOT_IN_EXE
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

Siehe auch

CreateService-

HandlerEx-

Service Control Handler Function

Dienstfunktionen

ServiceMain-

SetServiceStatus-