Empfangen von Ereignissen in einem Dienst

Ein Dienst, der eine Konsolenanwendung ist, kann einen Konsolensteuerungshandler registrieren, um Benachrichtigungen zu erhalten, wenn sich ein Benutzer abmeldet. Es wird jedoch kein Konsolenereignis gesendet, wenn sich ein interaktiver Benutzer anmeldet. Informationen zum Empfangen von Benachrichtigungen bei der Anmeldung eines Benutzers finden Sie unter Erstellen eines Winlogon-Benachrichtigungspakets.

Das System überträgt Geräteänderungsereignisse an alle Dienste. Diese Ereignisse können von einem Dienst in einer Fensterprozedur oder in seinem Dienststeuerungshandler empfangen werden. Verwenden Sie die Funktion RegisterDeviceNotification , um anzugeben, welche Ereignisse Ihr Dienst empfangen soll.

Achten Sie darauf, Plug & Play Geräteereignisse so schnell wie möglich zu behandeln. Andernfalls reagiert das System möglicherweise nicht mehr. Wenn Ihr Ereignishandler einen Vorgang ausführt, der die Ausführung möglicherweise blockiert (z. B. E/A), empfiehlt es sich, einen anderen Thread zu starten, um den Vorgang asynchron auszuführen.

Wenn ein Dienst RegisterDeviceNotification aufruft, gibt der Dienst auch ein Fensterhandle oder einen Dienst status Handle an. Wenn ein Dienst ein Fensterhandle angibt, empfängt die Fensterprozedur die Benachrichtigungsereignisse. Wenn ein Dienst seinen Dienst status-Handle angibt, empfängt sein Dienststeuerungshandler die Benachrichtigungsereignisse. Weitere Informationen finden Sie unter HandlerEx.

Gerätebenachrichtigungshandles, die von RegisterDeviceNotification zurückgegeben werden, müssen geschlossen werden, indem die Funktion UnregisterDeviceNotification aufgerufen wird, wenn sie nicht mehr benötigt werden.