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 |
|
DLL |
|