Visão geral da notificação PnP
O gerenciador PnP fornece um mecanismo para que drivers e aplicativos sejam notificados quando determinados eventos ocorrem em um dispositivo específico ou no sistema em geral. Um driver pode se registrar para notificação das seguintes categorias de eventos:
EventCategoryDeviceInterfaceChange
Quando um driver se registra para essa categoria de eventos em uma interface do dispositivo, o gerenciador PnP notifica o driver dos seguintes eventos:
GUID_DEVICE_INTERFACE_ARRIVAL
Indica que uma interface de dispositivo da classe especificada foi habilitada. Por exemplo, um usuário adicionou um novo disco ao computador e o gerenciador de volumes habilitou um novo volume (uma interface de dispositivo da classe "volume").GUID_DEVICE_INTERFACE_REMOVAL
Indica que uma interface de dispositivo da classe especificada foi desabilitada.Consulte IoRegisterDeviceInterface e rotinas relacionadas para obter mais informações sobre interfaces de dispositivo.
EventCategoryTargetDeviceChange
Quando um driver se registra para essa categoria de eventos em um dispositivo, o gerenciador PnP notifica o driver quando os seguintes eventos ocorrem no dispositivo:
GUID_TARGET_DEVICE_QUERY_REMOVE
Indica que o gerenciador PnP está prestes a remover os drivers do dispositivo. Várias ações podem causar esse evento, incluindo: um usuário solicitou a remoção do dispositivo especificado do computador ou um usuário emitiu uma solicitação de driver de atualização para o dispositivo. Essa notificação solicita aos drivers que o dispositivo aprove ou vete a operação de remoção iminente.GUID_TARGET_DEVICE_REMOVE_COMPLETE
Indica que o dispositivo especificado foi removido do computador ou que um usuário está alterando os drivers do dispositivo.GUID_TARGET_DEVICE_REMOVE_CANCELLED
Indica que uma operação de remoção iminente no dispositivo especificado foi cancelada.GUID_XXX (eventos personalizados)
Indica que ocorreu um evento personalizado no dispositivo especificado.Um gravador de driver pode definir um evento personalizado para um dispositivo. Quando o driver (ou outro componente relacionado) notifica o gerenciador PnP de que o evento personalizado ocorreu, o gerenciador PnP notifica todos os componentes registrados para notificações de alteração de dispositivo de destino no dispositivo.
Ao contrário do registro de alterações na interface do dispositivo, que podem ser consideradas um interesse "passivo" na interface, registrar-se para alterações de dispositivo de destino indica um interesse "ativo" em um dispositivo.
EventCategoryHardwareProfileChange
Essa categoria inclui os seguintes eventos:
GUID_HWPROFILE_QUERY_CHANGE
Indica que um usuário solicitou a alteração do perfil de hardware do computador. O gerenciador PnP usa essa notificação para perguntar aos componentes registrados se ele pode alterar o perfil de hardware sem interromper a operação do sistema. Os componentes registrados normalmente têm êxito nessas solicitações de consulta.GUID_HWPROFILE_CHANGE_COMPLETE
Indica que o perfil de hardware do computador foi alterado. Se um driver mantiver configurações específicas do perfil, esse driver deverá atualizar essas configurações após uma alteração de perfil de hardware.GUID_HWPROFILE_CHANGE_CANCELLED
Indica que uma alteração iminente do perfil de hardware foi cancelada.
A notificação PnP funciona da seguinte maneira para componentes do modo kernel:
Um driver se registra para notificação em uma categoria de eventos chamando IoRegisterPlugPlayNotification.
Uma rotina de retorno de chamada de notificação PnP permanece registrada até que o driver remova explicitamente o registro.
O gerenciador PnP chama a rotina de retorno de chamada do driver quando ocorre um evento na categoria registrada.
O driver remove o registro de retorno de chamada chamando IoUnregisterPlugPlayNotification.
Os drivers não devem gerar um evento síncrono ou aguardar que um evento assíncrono ocorra durante o processamento de um fechamento.
Para obter mais informações sobre a notificação PnP, consulte as seguintes seções:
Diretrizes para escrever rotinas de retorno de chamada de notificação PnP
Usando a notificação de alteração da interface do dispositivo PnP
Usando a notificação de alteração de dispositivo de destino PnP