Compatibilidad con dispositivos expulsables

Los dispositivos expulsables son dispositivos que se pueden insertar en una estación de acoplamiento y expulsarlos de la estación de acoplamiento. Normalmente, se debe deshabilitar la alimentación del bus de un dispositivo expulsable antes de que se pueda quitar el dispositivo.

Si se puede expulsar un dispositivo, el controlador de bus para el bus del dispositivo debe establecer el miembro EjectSupported en la estructura WDF_DEVICE_PNP_CAPABILITIES del dispositivo.

Cuando un controlador de bus determina que uno de sus dispositivos secundarios enumerados está a punto de expulsarse, llama a WdfPdoRequestEject o WdfChildListRequestChildEject. Por ejemplo, el controlador de bus podría detectar que un usuario ha presionado un botón de expulsión.

Cuando un controlador llama a WdfChildListRequestChildEject o WdfPdoRequestEject, el administrador de PnP usa el escenario de eliminación ordenada para informar a los controladores del dispositivo de que se está quitando el dispositivo. Una vez que el marco ha llamado a la función de devolución de llamada EvtDeviceReleaseHardware en el controlador de bus para el bus del dispositivo, el marco llama a la función de devolución de llamada EvtDeviceEject del controlador de bus, que realiza las operaciones necesarias para expulsar físicamente el dispositivo.

Si expulsar el dispositivo hace que también se expulsen otros dispositivos, el controlador de autobús puede mantener una lista de relaciones de expulsión. Cuando un usuario quita el dispositivo, el administrador de PnP informa a los controladores de los dispositivos de la lista que también se quitan sus dispositivos. Para mantener una lista de relaciones de ejección, un controlador de bus puede usar los métodos WdfPdoAddEjectionRelationsPhysicalDevice, WdfPdoRemoveEjectionRelationsPhysicalDevice y WdfPdoClearEjectionRelationsDevices .

Si un dispositivo se puede bloquear en su estación de acoplamiento, el controlador de bus debe establecer el miembro LockSupported en la estructura WDF_DEVICE_PNP_CAPABILITIES del dispositivo. El controlador de bus también debe proporcionar una función de devolución de llamada EvtDeviceSetLock , que bloquea el dispositivo para deshabilitar la expulsión o desbloquea el dispositivo para habilitar la ejección.