Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um driver intermediário NDIS regista as suas funções MiniportXxx e as suas funções ProtocolXxx no contexto da sua rotina DriverEntry. Para registrar as suas funções MiniportXxx, um driver intermediário deve chamar a função NdisMRegisterMiniportDriver com o sinalizador NDIS_INTERMEDIATE_DRIVER ativado. Esta bandeira está na estrutura NDIS_MINIPORT_DRIVER_CHARACTERISTICS que o controlador passa ao MiniportDriverCharacteristics. Para registrar as suas funções ProtocolXxx, um driver intermediário deve chamar a função NdisRegisterProtocolDriver.
DriverEntry devolve STATUS_SUCCESS, ou o seu equivalente NDIS_STATUS_SUCCESS, se o driver tiver sido registado com sucesso como um driver intermediário NDIS. Se o DriverEntry falhar na inicialização propagando um status de erro que foi retornado por uma função NdisXxx ou por uma rotina de suporte do modo núcleo, o driver não permanecerá carregado. DriverEntry deve ser executado sincronamente; ou seja, não pode retornar STATUS_PENDING ou o seu equivalente NDIS_STATUS_PENDING.
Para registar o driver intermédio no NDIS, a rotina DriverEntry deve, no mínimo:
- Utilize a função NdisMRegisterMiniportDriver com o indicador NDIS_INTERMEDIATE_DRIVER ativado para registar as funções MiniportXxx do controlador.
- Chame a função NdisRegisterProtocolDriver para registar as funções ProtocolXxx do driver, caso o driver se vincule posteriormente a um driver NDIS subjacente.
- Chame a função NdisIMAssociateMiniport para informar o NDIS sobre a associação entre a camada superior do miniport do driver e a camada inferior do protocolo.
Se ocorrer um erro em DriverEntry após NdisMRegisterMiniportDriver retornar com êxito, o driver deve chamar a função NdisMDeregisterMiniportDriver antes de DriverEntry retornar. Se DriverEntry for bem-sucedido, o driver deverá chamar NdisMDeregisterMiniportDriver a partir da sua função MiniportDriverUnload.
Os drivers intermediários partilham a maioria dos requisitos de DriverEntry dos drivers de protocolo e dos drivers de miniport.
A inicialização da miniporta virtual de um driver intermediário ocorre quando o driver chama a função NdisIMInitializeDeviceInstanceEx a partir da sua função ProtocolBindAdapterEx.
O NDIS chama a função ProtocolBindAdapterEx após todos os drivers de miniporta subjacentes serem inicializados.
Na prática, a função DriverEntry de um driver NDIS intermédio pode ignorar o ponteiro RegistryPath depois de passá-lo para NdisMRegisterMiniportDriver. Este controlador também pode ignorar o ponteiro DriverObject depois de passá-lo para NdisMRegisterMiniportDriver. No entanto, o driver deve salvar o valor do identificador do driver de miniporta que é retornado pelo NdisMRegisterMiniportDriver em NdisMiniportDriverHandle e o valor do identificador de protocolo que é retornado por NdisRegisterProtocolDriver em NdisProtocolHandle para funções nas chamadas subsequentes para NdisXxx. A função ProtocolBindAdapterEx do driver intermediário vincula o driver a cada miniporta subjacente antes de a função MiniportInitializeEx ser chamada para inicializar a miniporta virtual do driver intermediário. Posteriormente, os drivers de protocolo de nível ainda mais alto vinculam-se à miniporta virtual que este cria. Essa estratégia permite que um driver intermediário NDIS aloque recursos na criação da miniporta virtual de acordo com os recursos do driver de miniporta subjacente ao qual está vinculado.