Manipulando solicitações de enumeração

O gerente PnP pode solicitar que um motorista de ônibus enumere seus filhos a qualquer momento. (Se você estiver familiarizado com interfaces WDM, as solicitações de enumeração serão IRP_MN_QUERY_DEVICE_RELATIONS solicitações com um tipo de relação BusRelations.) Os drivers baseados em estrutura não veem essas solicitações. Em vez disso, a estrutura manipula as solicitações usando as informações armazenadas na lista filho de um dispositivo. O driver é responsável por manter a lista filho atualizada para que a estrutura possa fornecer informações corretas quando o gerenciador PnP solicitar uma enumeração.

Os drivers de barramento baseados em estrutura que dão suporte à enumeração dinâmica podem receber uma solicitação para reenumerar um dispositivo filho específico. Essa solicitação pode ser enviada pelo driver de função do dispositivo filho após o driver detectar uma falha no dispositivo. (A estrutura dá suporte a esse tipo de solicitação implementando a interface REENUMERATE_SELF_INTERFACE_STANDARD , que é uma interface definida pelo driver padrão definida em wdm.h.)

Os drivers de barramento baseados em estrutura que dão suporte à enumeração dinâmica podem fornecer uma função de retorno de chamada EvtChildListDeviceReenumerated , que a estrutura chama quando recebe uma solicitação de reenumeração do driver de um dispositivo filho. Se essa função de retorno de chamada retornar TRUE ou não existir, a estrutura marcará o dispositivo filho como não mais presente e informará ao gerente PnP que a lista filho do motorista do barramento foi alterada. Como resultado, o gerenciador PnP solicita uma reenumeração e a estrutura chama a função de retorno de chamada EvtChildListCreateDevice do driver, que cria um novo PDO para o dispositivo filho.