Suporte para dispositivos ejetáveis
Os dispositivos ejetáveis são dispositivos que podem ser inseridos em uma estação de ancoragem e ejetados da estação de ancoragem. Normalmente, a alimentação elétrica do barramento de um dispositivo ejetável deve ser desativada antes que o dispositivo possa ser removido.
Se um dispositivo for ejetável, o driver de barramento do dispositivo deve definir o membro EjectSupported na estrutura WDF_DEVICE_PNP_CAPABILITIES do dispositivo.
Quando um driver de barramento determina que um de seus dispositivos filho enumerados está prestes a ser ejetado, ele chama WdfPdoRequestEject ou WdfChildListRequestChildEject. Por exemplo, o motorista de autocarro pode detectar que um utilizador pressionou um botão de ejeção.
Quando um driver chama WdfChildListRequestChildEject ou WdfPdoRequestEject, o gerenciador PnP usa o cenário de remoção ordenada para informar os drivers do dispositivo que o dispositivo está sendo removido. Depois que a estrutura chama a função de retorno de chamada EvtDeviceReleaseHardware no driver de barramento para o barramento do dispositivo, a estrutura chama a função de retorno de chamada EvtDeviceEject do driver de barramento, que executa todas as operações necessárias para ejetar fisicamente o dispositivo.
Se a ejeção do seu dispositivo levar à ejeção de dispositivos adicionais, o controlador do barramento pode manter uma lista de relações de ejeção . Quando um usuário remove seu dispositivo, o gerenciador PnP informa os drivers de dispositivos na lista que seus dispositivos também estão sendo removidos. Os métodos para manter uma lista de relações de ejeção que um driver de barramento pode usar são: os WdfPdoAddEjectionRelationsPhysicalDevice, WdfPdoRemoveEjectionRelationsPhysicalDevicee WdfPdoClearEjectionRelationsDevices.
Se um dispositivo puder ser bloqueado em sua estação de ancoragem, o driver de barramento deverá definir o membro LockSupported na estrutura WDF_DEVICE_PNP_CAPABILITIES do dispositivo. O motorista de autocarro também deve fornecer uma função de callback EvtDeviceSetLock, que bloqueia o dispositivo para desativar a ejeção ou desbloqueia o dispositivo para permitir a ejeção.