Gestione degli eventi di modifica dell'interfaccia del dispositivo
Quando un driver o un componente in modalità utente abilita o disabilita un'istanza dell'interfaccia del dispositivo, il gestore PnP chiama tutte le routine di callback di notifica registrate per gli eventi EventCategoryDeviceInterfaceChange nella classe dell'interfaccia del dispositivo. Per indicare il motivo della notifica, il gestore PnP imposta il membro Event del parametro NotificationStructure della routine di callback su GUID_DEVICE_INTERFACE_ARRIVAL o GUID_DEVICE_INTERFACE_REMOVAL.
Quando si gestisce un evento GUID_DEVICE_INTERFACE_ARRIVAL, una routine di callback di notifica deve:
Eseguire attività definite dal driver per gestire la nuova interfaccia.
In genere, una routine di callback di notifica apre direttamente il dispositivo nel contesto del callback. Tuttavia, se l'apertura del dispositivo può causare eventi PnP successivi (ad esempio, l'enumerazione dei dispositivi figlio), la routine di callback deve invece accodare una routine di lavoro per aprire il dispositivo; in caso contrario, può verificarsi un deadlock.
Una routine di callback potrebbe abilitare un'interfaccia personalizzata in risposta alla disponibilità della nuova interfaccia.
Quando si gestisce un evento GUID_DEVICE_INTERFACE_REMOVAL, una routine di callback di notifica deve:
- Annullare le operazioni eseguite quando l'interfaccia è stata abilitata. Chiudere tutti gli handle di file aperti in risposta all'evento di arrivo dell'interfaccia.
Oltre a EventCategoryDeviceInterfaceChange, il driver deve anche registrarsi per EventCategoryTargetDeviceChange e chiudere l'handle di file dal callback dell'evento GUID_TARGET_DEVICE_QUERY_REMOVE . Mantenere aperto l'handle di file comporterà il veto del processo di rimozione e causerà l'annullamento della rimozione ordinata.