Types d’événements d’appareil
Pour déterminer le type d’événement de l’appareil lors du traitement d’un message WM_DEVICECHANGE , examinez le paramètre wParam . La valeur de wParam détermine la signification des données spécifiques à l’événement dans le paramètre lParam . En général, les données spécifiques aux événements identifient l’appareil et fournissent des détails supplémentaires sur l’événement. Le format de ces données dépend du type d’appareil, mais les premiers octets ont toujours le même format que la structure DEV_BROADCAST_HDR . Pour déterminer le format des données, vérifiez le membre dbch_devicetype .
Le système diffuse un événement d’appareil de type DBT_DEVICEARRIVAL (autrement dit, un message WM_DEVICECHANGE avec wParam défini sur DBT_DEVICEARRIVAL) chaque fois qu’un appareil a été inséré et est disponible pour une utilisation. Les applications vérifient généralement le type d’appareil et commencent à utiliser l’appareil immédiatement s’il est approprié.
Le système diffuse un événement d’appareil DBT_DEVICEQUERYREMOVE pour demander l’autorisation de supprimer un appareil. Pour déterminer s’il a besoin de l’appareil, une application peut afficher une boîte de dialogue pour inviter l’utilisateur à obtenir des instructions. Si une application détermine qu’elle a besoin de l’appareil, elle peut refuser cette demande et annuler la suppression en retournant BROADCAST_QUERY_DENY. Si l’application n’a pas besoin de l’appareil, elle doit retourner TRUE. Le système envoie immédiatement un message DBT_DEVICEQUERYREMOVEFAILED si une application ou un pilote a annulé une demande précédente pour supprimer un appareil.
Le système diffuse un événement d’appareil DBT_DEVICEREMOVEPENDING comme dernier avertissement avant la suppression d’un appareil. À ce stade, l’application ne peut pas annuler la suppression. Par conséquent, si elle utilise l’appareil, elle doit préparer sa suppression pour empêcher la perte de données. Cela est particulièrement important lorsqu’une connexion réseau est supprimée. L’application doit déterminer si l’un de ses fichiers ouverts ou canaux se trouve sur cette connexion. Il peut le faire en comparant l’identificateur de ressource réseau dans les données spécifiques à l’événement du message avec les identificateurs de ressource précédemment obtenus pour les fichiers et les canaux. Le système diffuse un événement d’appareil DBT_DEVICEREMOVECOMPLETE lorsqu’un appareil a été supprimé et n’est plus disponible.
Le système diffuse un événement d’appareil DBT_QUERYCHANGECONFIG pour demander l’autorisation de modifier la configuration actuelle (dock ou undock). Toute application peut retourner BROADCAST_QUERY_DENY pour refuser la demande et annuler la modification. Si une application refuse la demande, le système envoie un message DBT_CONFIGCHANGECANCELED . Si la configuration actuelle a changé, en raison d’un dock ou d’undock, le système envoie un message DBT_CONFIGCHANGED .
Le système diffuse un événement d’appareil DBT_DEVICETYPESPECIFIC chaque fois qu’un événement spécifique à l’appareil se produit.
Les pilotes peuvent créer leurs propres types d’événements personnalisés. Les événements personnalisés sont envoyés uniquement à l’application qui ont été inscrits pour la notification d’événement d’appareil sur un appareil particulier et peuvent uniquement être lancés par les pilotes en mode noyau. Pour plus d’informations, consultez DBT_CUSTOMEVENT.