Suporte a dispositivos ejetáveis

Dispositivos ejetáveis são dispositivos que podem ser inseridos em uma estação de encaixe e ejetados da estação de encaixe. Normalmente, a energia do barramento de um dispositivo ejetável deve ser desabilitada antes que o dispositivo possa ser removido.

Se um dispositivo for ejetável, o driver de barramento do barramento do dispositivo deverá definir o membro EjectSupported na estrutura de WDF_DEVICE_PNP_CAPABILITIES do dispositivo.

Quando um motorista de ônibus determina que um de seus dispositivos filho enumerados está prestes a ser ejetado, ele chama WdfPdoRequestEject ou WdfChildListRequestChildEject. Por exemplo, o motorista do ônibus pode detectar que um usuário pressionou um botão ejetar.

Quando um driver chama WdfChildListRequestChildEject ou WdfPdoRequestEject, o gerenciador de PnP usa o cenário de remoção ordenada para informar aos drivers do dispositivo que o dispositivo está sendo removido. Depois que a estrutura tiver chamado a função de retorno de chamada EvtDeviceReleaseHardware no driver de barramento do barramento do dispositivo, a estrutura chamará a função de retorno de chamada EvtDeviceEject do driver de ônibus, que executa todas as operações necessárias para ejetar fisicamente o dispositivo.

Se ejetar seu dispositivo fizer com que dispositivos adicionais também sejam ejetados, o motorista do ônibus poderá manter uma lista de relações de ejeção. Quando um usuário remove seu dispositivo, o gerenciador de PnP informa aos drivers de dispositivos na lista que seus dispositivos também estão sendo removidos. Para manter uma lista de relações de ejeção, um motorista de barramento pode usar os métodos WdfPdoAddEjectionRelationsPhysicalDevice, WdfPdoRemoveEjectionRelationsPhysicalDevice e WdfPdoClearEjectionRelationsDevices .

Se um dispositivo puder ser bloqueado em sua estação de encaixe, o motorista do ônibus deverá definir o membro LockSupported na estrutura WDF_DEVICE_PNP_CAPABILITIES do dispositivo. O driver de barramento também deve fornecer uma função de retorno de chamada EvtDeviceSetLock , que bloqueia o dispositivo para desabilitar a ejeção ou desbloqueia o dispositivo para habilitar a ejeção.