Partager via


Prise en charge des appareils éjectables

Les appareils éjectables sont des appareils qui peuvent être insérés dans une station d’accueil et éjectés de la station d’accueil. En règle générale, l’alimentation du bus d’un appareil éjectable doit être désactivée pour que l’appareil puisse être retiré.

Si un appareil est éjectable, le pilote de bus du bus de l’appareil doit définir le membre EjectSupported dans la structure WDF_DEVICE_PNP_CAPABILITIES de l’appareil.

Lorsqu’un pilote de bus détermine que l’un de ses périphériques enfants énumérés est sur le point d’être éjecté, il appelle WdfPdoRequestEject ou WdfChildListRequestChildEject. Par exemple, le pilote de bus peut détecter qu’un utilisateur a appuyé sur un bouton d’éjection.

Lorsqu’un pilote appelle WdfChildListRequestChildEject ou WdfPdoRequestEject, le gestionnaire PnP utilise le scénario de suppression ordonnée pour informer les pilotes de l’appareil que le périphérique est supprimé. Une fois que l’infrastructure a appelé la fonction de rappel EvtDeviceReleaseHardware dans le pilote de bus pour le bus de l’appareil, l’infrastructure appelle la fonction de rappel EvtDeviceEject du pilote de bus, qui effectue toutes les opérations nécessaires pour éjecter physiquement l’appareil.

Si l’éjection de votre appareil entraîne également l’éjection d’appareils supplémentaires, votre pilote de bus peut conserver une liste de relations d’éjection. Lorsqu’un utilisateur supprime votre appareil, le gestionnaire PnP informe les pilotes des appareils de la liste que leurs appareils sont également supprimés. Pour conserver une liste de relations d’éjection, un pilote de bus peut utiliser les méthodes WdfPdoAddEjectionRelationsPhysicalDevice, WdfPdoRemoveEjectionRelationsPhysicalDevice et WdfPdoClearEjectionRelationsDevices .

Si un appareil peut être verrouillé dans sa station d’accueil, le pilote de bus doit définir le membre LockSupported dans la structure WDF_DEVICE_PNP_CAPABILITIES de l’appareil. Le pilote de bus doit également fournir une fonction de rappel EvtDeviceSetLock , qui verrouille l’appareil pour désactiver l’éjection ou déverrouille l’appareil pour activer l’éjection.