Freigeben über


SubscribeServiceChangeNotifications-Funktion

Abonniert Dienst-status Änderungsbenachrichtigungen mithilfe einer Rückruffunktion.

Syntax

DWORD WINAPI SubscribeServiceChangeNotifications(
  _In_     SC_HANDLE                     hService,
  _In_     SC_EVENT_TYPE                 eEventType,
  _In_     PSC_NOTIFICATION_CALLBACK     pCallback,
  _In_opt_ PVOID                         pCallbackContext,
  _Out_    PSC_NOTIFICATION_REGISTRATION *pSubscription
);

Parameter

hService [in]

Ein Handle für den Dienst oder ein Handle für den Dienststeuerungs-Manager (Service Control Manager, SCM), der auf Änderungen überwacht werden soll.

Handles für Dienste werden von der OpenService - und CreateService-Funktion zurückgegeben und müssen über das zugriffsrecht SERVICE_QUERY_STATUS verfügen. Handles an den Dienststeuerungs-Manager werden von der OpenSCManager-Funktion zurückgegeben und müssen über das zugriffsrecht SC_MANAGER_ENUMERATE_SERVICE verfügen.

eEventType [in]

Gibt den Typ der status Änderungen an, die gemeldet werden sollen. Dieser Parameter wird auf einen der in SC_EVENT_TYPE angegebenen Werte festgelegt. Das Verhalten für diese Funktion unterscheidet sich je nach Ereignistyp wie folgt.

Wert Bedeutung
SC_EVENT_DATABASE_CHANGE
0
Ein Dienst wurde hinzugefügt oder gelöscht. Der hService-Parameter muss ein Handle für den SCM sein.
SC_EVENT_PROPERTY_CHANGE
1
Mindestens eine Diensteigenschaft wurde aktualisiert. Der hService-Parameter muss ein Handle für den Dienst sein.
SC_EVENT_STATUS_CHANGE
2
Die status eines Diensts wurde geändert. Der hService-Parameter muss ein Handle für den Dienst sein.

pCallback [in]

Gibt die Rückruffunktion an. Der Rückruf muss als typ von SC_NOTIFICATION_CALLBACK definiert werden. Weitere Informationen finden Sie in den Hinweisen.

pCallbackContext [in, optional]

Ein Zeiger, der den Kontext für diesen Benachrichtigungsrückruf darstellt.

pSubscription [out]

Gibt einen Zeiger auf das Abonnement zurück, der sich aus der Registrierung des Benachrichtigungsrückrufs ergibt. Der Aufrufer ist für den Aufruf von UnsubscribeServiceChangeNotifications verantwortlich, um den Empfang von Benachrichtigungen zu beenden.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert ERROR_SUCCESS.

Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der Systemfehlercodes.

Bemerkungen

Die Rückruffunktion wird wie folgt deklariert:

typedef VOID CALLBACK SC_NOTIFICATION_CALLBACK(
    _In_    DWORD                   dwNotify,
    _In_    PVOID                   pCallbackContext
);
typedef SC_NOTIFICATION_CALLBACK* PSC_NOTIFICATION_CALLBACK;

Die Rückruffunktion empfängt einen Zeiger auf den vom Aufrufer bereitgestellten Kontext. Der Rückruf wird als Ergebnis des Änderungsereignisses des Diensts status aufgerufen. Wenn der Rückruf aufgerufen wird, wird er mit einer Bitmaske von SERVICE_NOTIFY_XXX-Werten bereitgestellt, die den Typ des Diensts angibt, der sich ändern status. Wenn der Rückruf mit null anstelle eines gültigen SERVICE_NOTIFY_XXX-Werts bereitgestellt wird, muss die Anwendung überprüfen, was geändert wurde.

Die Rückruffunktion darf die Ausführung nicht blockieren. Wenn Sie erwarten, dass die Ausführung der Rückruffunktion Zeit in Anspruch nimmt, laden Sie die Arbeit, die Sie in der Rückruffunktion ausführen, in einen separaten Thread aus, indem Sie ein Arbeitselement an einen Thread in einem Threadpool anreihen. Einige Arten von Arbeiten, die dazu führen können, dass die Rückruffunktion Zeit in Anspruch nimmt, sind das Ausführen von Datei-E/A, das Warten auf ein Ereignis und das Ausführen externer Remoteprozeduraufrufe.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 8 [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2012 [nur Desktop-Apps]
Header
Winsvcp.h
DLL
SecHost.dll

Weitere Informationen

CreateService

Openservice

OpenSCManager

UnsubscribeServiceChangeNotifications

QueryServiceDynamicInformation