Manipulando eventos de alteração da interface do dispositivo
Quando um driver ou um componente de modo de usuário habilita ou desabilita uma instância de interface do dispositivo, o gerenciador PnP chama todas as rotinas de retorno de chamada de notificação registradas para eventos EventCategoryDeviceInterfaceChange na classe de interface do dispositivo. Para indicar o motivo da notificação, o gerenciador PnP define o membro Event do parâmetro NotificationStructure da rotina de retorno de chamada como GUID_DEVICE_INTERFACE_ARRIVAL ou GUID_DEVICE_INTERFACE_REMOVAL.
Ao manipular um evento de GUID_DEVICE_INTERFACE_ARRIVAL, uma rotina de retorno de chamada de notificação deve:
Execute tarefas definidas pelo driver para lidar com a nova interface.
Normalmente, uma rotina de retorno de chamada de notificação abre diretamente o dispositivo no contexto do retorno de chamada. No entanto, se a abertura do dispositivo puder fazer com que eventos PnP subsequentes ocorram (por exemplo, a enumeração de dispositivos filho), a rotina de retorno de chamada deverá enfileirar uma rotina de trabalho para abrir o dispositivo; caso contrário, um deadlock pode ocorrer.
Uma rotina de retorno de chamada pode habilitar uma interface própria em resposta à disponibilidade da nova interface.
Ao manipular um evento GUID_DEVICE_INTERFACE_REMOVAL, uma rotina de retorno de chamada de notificação deve:
- Desfaça todas as operações executadas quando a interface foi habilitada. Feche os identificadores de arquivo que foram abertos em resposta ao evento de chegada da interface.
Além de EventCategoryDeviceInterfaceChange, o driver também deve se registrar para EventCategoryTargetDeviceChange e fechar o identificador de arquivo do retorno de chamada de evento GUID_TARGET_DEVICE_QUERY_REMOVE. Manter o identificador de arquivo aberto vetará o processo de remoção e fará com que a remoção ordenada seja cancelada.