在服务中接收事件

作为控制台应用程序的服务可以注册 控制台控制处理程序 ,以在用户注销时接收通知。 但是,交互式用户登录时不会发送控制台事件。 有关在用户登录时接收通知的信息,请参阅 创建 Winlogon 通知包

系统将设备更改事件广播到所有服务。 服务可以在窗口过程中或其服务控制处理程序中接收这些事件。 若要指定服务应接收的事件,请使用 RegisterDeviceNotification 函数。

请确保尽快处理即插即用设备事件。 否则,系统可能会变得无响应。 如果事件处理程序要执行可能会阻止执行 ((例如 I/O) )的操作,则最好启动另一个线程以异步方式执行该操作。

当服务调用 RegisterDeviceNotification 时,该服务还指定窗口句柄或服务状态句柄。 如果服务指定窗口句柄,则窗口过程将接收通知事件。 如果服务指定其服务状态句柄,则其服务控制处理程序将接收通知事件。 有关详细信息,请参阅 HandlerEx

当 RegisterDeviceNotification 返回的设备通知句柄不再需要时,必须通过调用 UnregisterDeviceNotification 函数将其关闭。