Inicializando miniportos virtuais
Um driver intermediário inicializa seus miniportos virtuais depois de abrir com êxito um adaptador de miniporto subjacente e está pronto para aceitar solicitações e envios em seus miniportos virtuais. Um driver intermediário chama NdisIMInitializeDeviceInstanceEx de sua função ProtocolBindAdapterEx uma ou mais vezes para solicitar a inicialização de um ou mais miniportos virtuais.
Nota Um driver intermediário não é necessário para chamar NdisIMInitializeDeviceInstanceEx quando abre um adaptador de miniporto subjacente. Não precisa haver uma relação um-para-um entre miniportos virtuais e adaptadores abertos.
Defina o parâmetro DriverInstance de NdisIMInitializeDeviceInstanceEx como o nome do dispositivo para o miniporto virtual que está sendo inicializado. O driver intermediário obtém o nome do dispositivo da chave do Registro UpperBindings .
Para um driver intermediário MUX n-para-um que coloca em camadas vários miniportos virtuais em uma única NIC física, deve haver um nome de dispositivo para cada miniporto virtual. O driver intermediário do MUX requer um objeto de notificação que mantém a lista de nomes de dispositivos de miniporta virtual. O local recomendado para a lista é a chave do Registro UpperBindings . Nesse caso, a chave do Registro UpperBindings é uma entrada MULTI_SZ que contém a lista de nomes de dispositivo. O driver intermediário do MUX chama NdisIMInitializeDeviceInstanceEx uma vez para cada nome de dispositivo especificado na lista de nomes do dispositivo.
Chamar NdisIMInitializeDeviceInstanceEx resulta em uma chamada para a função MiniportInitializeEx do driver intermediário para executar a inicialização do miniporto virtual especificado, desde que o NDIS receba uma IRP_MN_START_DEVICE para iniciar o dispositivo. Se o NDIS não receber esse IRP, o NDIS não chamará a função MiniportInitializeEx do driver intermediário. A chamada para MiniportInitializeEx pode acontecer posteriormente e, portanto, não está necessariamente dentro do contexto da chamada para NdisIMInitializeDeviceInstanceEx. Se o NDIS nunca chamar MiniportInitializeEx para o miniporto virtual referenciado em uma chamada para NdisIMInitializeDeviceInstanceEx e o driver intermediário não exigir mais o miniporto virtual, o driver intermediário deverá chamar NdisIMCancelInitializeDeviceInstance para cancelar a inicialização do miniporto virtual. Por exemplo, suponha que um driver intermediário crie um miniporto virtual em resposta a uma associação bem-sucedida a um miniporto subjacente. Se essa associação for removida antes que o NDIS chame MiniportInitializeEx, o driver intermediário deverá chamar NdisIMCancelInitializeDeviceInstance para cancelar a inicialização do miniporto.
MiniportInitializeEx deve alocar e inicializar uma área de contexto específica do miniport virtual. Para obter mais informações sobre como especificar a área de contexto, consulte Inicializando um miniporto virtual.
Um driver intermediário deve operar como um driver desserializado. Para obter mais informações sobre drivers desserializados, consulte Drivers de miniporto NDIS desserializados.
Um driver intermediário deve verificar se as informações de estado que ele mantém estão inicializadas corretamente. Se o driver exigir recursos relacionados ao envio, por exemplo, novas estruturas de NET_BUFFER_LIST para dados de rede que MiniportSendNetBufferLists transmitirão para a próxima camada inferior, o pool de estrutura NET_BUFFER_LIST poderá ser alocado no momento.