Compartilhar via


Recebendo eventos em um serviço

Um serviço que é um aplicativo de console pode registrar um manipulador de controle de console para receber notificação quando um usuário faz logoff. No entanto, não há nenhum evento de console enviado quando um usuário interativo faz logon. Para obter informações sobre como receber notificação quando um usuário faz logon, consulte Criando um pacote de notificação do Winlogon.

O sistema transmite eventos de alteração de dispositivo para todos os serviços. Esses eventos podem ser recebidos por um serviço em um procedimento de janela ou em seu manipulador de controle de serviço. Para especificar quais eventos seu serviço deve receber, use a função RegisterDeviceNotification .

Certifique-se de lidar com Plug and Play eventos de dispositivo o mais rápido possível. Caso contrário, o sistema poderá ficar sem resposta. Se o manipulador de eventos for executar uma operação que possa bloquear a execução (como E/S), é melhor iniciar outro thread para executar a operação de forma assíncrona.

Quando um serviço chama RegisterDeviceNotification, o serviço também especifica um identificador de janela ou um identificador de status de serviço. Se um serviço especificar um identificador de janela, o procedimento de janela receberá os eventos de notificação. Se um serviço especificar seu identificador de status de serviço, seu manipulador de controle de serviço receberá os eventos de notificação. Para obter mais informações, consulte HandlerEx.

Os identificadores de notificação de dispositivo retornados por RegisterDeviceNotification devem ser fechados chamando a função UnregisterDeviceNotification quando eles não forem mais necessários.