Enregistrement pour la notification de l'arrivée d'une interface d'appareil et du retrait d'un appareil
Cette rubrique décrit comment une application ou un pilote en mode utilisateur s’enregistre pour la notification de l’arrivée d’une interface d’appareil et du retrait d’un appareil.
Si vous suivez cette procédure dans un pilote UMDF 2, consultez la section Utilisation des interfaces d’appareils pour obtenir un exemple de code.
En règle générale, un composant en mode utilisateur appelle CM_Register_Notification pour rechercher une interface d’appareil, puis envoie des requêtes d’E/S à l’interface. Pour cela, le composant s’inscrit à la fois pour CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE et CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE pour la notification des arrivées d’interface d’appareil et des suppressions d’appareils respectivement. La séquence d’appel peut se présenter comme suit.
Enregistrement pour la notification de l'arrivée d'une interface d'appareil et du retrait d'un appareil
Appelez CM_Register_Notification avec CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE pour vous inscrire aux notifications d’arrivée d’interface d’appareil. Lorsque les interfaces futures de la classe spécifiée arrivent, le système avertit votre composant.
Étant donné que l’interface à laquelle vous souhaitez envoyer des E/S peut déjà être présente sur le système, appelez CM_Get_Device_Interface_List ou SetupDiGetClassDevs pour récupérer une liste d’interfaces existantes. Remarque Si une interface arrive entre l’étape 1 et l’étape 2, elle est répertoriée deux fois, à partir de l’inscription à l’étape 1 et de la liste des interfaces à l’étape 2.
Une fois que vous avez trouvé l’interface souhaitée, appelez CreateFile pour ouvrir un handle pour l’appareil.
Après avoir créé un handle pour l’appareil à l’étape 3, appelez CM_Register_Notification une seconde fois. Cette fois, inscrivez-vous aux notifications de type CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE et fournissez le handle du nouvel appareil comme handle pour lequel recevoir des notifications. Lorsque l’appareil représenté par l’interface reçoit une demande de suppression de requête, le système avertit votre composant.
Utilisez cette table lorsque vous implémentez votre rappel de notification du handle de l’appareil.
Valeur d’action que le rappel reçoit | Ce que votre composant doit faire |
---|---|
CM_NOTIFY_ACTION_DEVICEQUERYREMOVE | Appelez CloseHandle pour fermer le handle de l’appareil. Si vous ne le faites pas, votre handle ouvert empêche la suppression de la requête de cet appareil d’aboutir. |
CM_NOTIFY_ACTION_DEVICEQUERYREMOVEFAILED | La suppression de la requête a échoué ; l’appareil et son interface sont donc toujours valides. Pour continuer à envoyer des E/S à l’interface, ouvrez un nouveau handle. L’inscription de notification sur l’appareil via le handle d’origine reste valide même si ce handle a été fermé, il n’est donc pas nécessaire de désinscrire cette inscription de notification et de créer une nouvelle inscription sous le nouveau handle de l’interface de l’appareil. Notez que si vous vous inscrivez pour les notifications sur un appareil en cours de suppression de requête après l’envoi des notifications CM_NOTIFY_ACTION_DEVICEQUERYREMOVE, vous pouvez recevoir une notification CM_NOTIFY_ACTION_DEVICEQUERYREMOVEFAILED sans recevoir d’abord de notification CM_NOTIFY_ACTION_DEVICEQUERYREMOVE. |
CM_NOTIFY_ACTION_DEVICEREMOVEPENDING | Appelez CM_Unregister_Notification pour annuler l’inscription aux notifications pour votre handle. Vous devez le faire à partir d’une routine différée. Consultez la section Remarques de CM_Unregister_Notification pour en savoir plus. Si vous disposez toujours d’un handle ouvert sur l’appareil, appelez CloseHandle pour fermer le handle de l’appareil. |
CM_NOTIFY_ACTION_DEVICEREMOVECOMPLETE | Appelez CM_Unregister_Notification pour annuler l’inscription aux notifications pour votre handle. Vous devez le faire à partir d’une routine différée. Consultez la section Remarques de CM_Unregister_Notification pour en savoir plus. Si vous disposez toujours d’un handle ouvert sur l’appareil, appelez CloseHandle pour fermer le handle de l’appareil. |
- Une fois que vous avez terminé avec l’appareil, appelez CM_Unregister_Notification pour annuler l’inscription du rappel de notification d’interface que vous avez enregistré à l’étape 1.
Un pilote UMDF 2 peut effectuer les étapes 1 à 4 dans la routine de rappel EvtDevicePrepareHardware du pilote, et l’étape 6 dans l’une des routines de rappel de suppression d’appareil du pilote.