Função DriverEntry Intermediário
O ponto de entrada inicial necessário de um driver intermediário deve ser explicitamente chamado driverEntry para que o carregador possa identificá-lo corretamente. Todas as outras funções de driver exportadas, que são descritas nesta seção como MiniportXxx e ProtocolXxx, podem ter qualquer nome especificado pelo fornecedor porque são passadas como endereços para o NDIS.
Em um driver intermediário, DriverEntry deve, no mínimo:
Chame NdisMRegisterMiniportDriver e salve o identificador retornado no parâmetro NdisMiniportDriverHandle .
Chame NdisRegisterProtocolDriver para registrar as funções ProtocolXxx do driver se o driver se associar posteriormente a um driver NDIS subjacente.
Chame NdisIMAssociateMiniport para informar o NDIS sobre a associação entre a borda superior do miniporto do driver e a borda inferior do protocolo.
Um driver intermediário deve registrar um manipulador de descarregamento MiniportDriverUnload . Esse manipulador de descarregamento é chamado quando o sistema descarrega o driver intermediário. Se DriverEntry falhar, esse manipulador de descarregamento não será chamado; em vez disso, o driver é simplesmente descarregado. Para obter mais informações sobre o manipulador de descarregamento, consulte Descarregando um driver intermediário.
O manipulador de descarregamento deve chamar NdisDeregisterProtocolDriver para desregistrar a parte de protocolo do driver intermediário. O manipulador de descarregamento também deve executar todas as operações de limpeza necessárias, como realocar recursos usados pela parte de protocolo do driver.
Observe que um manipulador de descarregamento difere de uma função MiniportHaltEx : o manipulador de descarregamento tem um escopo mais global e o escopo da função MiniportHaltEx é restrito a um adaptador de miniporto específico. O driver intermediário deve limpo informações de estado e realocar recursos quando cada driver de miniporto subjacente associado a ele for interrompido. Para obter informações sobre como lidar com a operação de parada para miniportos virtuais, confira Como interromper um miniporto virtual.
ProtocolUninstall é um manipulador de descarregamento opcional. Registre um ponto de entrada para essa função na estrutura ProtocolCharacteristics que você passa para NdisRegisterProtocolDriver. O NDIS chama ProtocolUninstall em resposta a uma solicitação do usuário para desinstalar um driver intermediário. O NDIS chama ProtocolUnbindAdapterEx uma vez para cada adaptador associado e, em seguida, o NDIS chama ProtocolUninstall. Esse manipulador é chamado antes que o sistema realmente descarregue o driver. Esse tempo oferece a chance de liberar quaisquer objetos de dispositivo ou outros recursos que, de outra forma, possam impedir que o sistema chame o manipulador de descarregamento registrado com NdisMRegisterMiniportDriver e descarregue o driver.
DriverEntry pode inicializar bloqueios de rotação para proteger todos os recursos compartilhados globalmente alocados pelo driver intermediário, como variáveis de estado, estruturas e áreas de memória. O driver usa esses recursos para rastrear conexões e rastrear envios em andamento ou filas alocadas pelo driver.
Se DriverEntry não alocar recursos necessários para executar operações de E/S de rede, ele deverá liberar todos os recursos alocados anteriormente e retornar um erro apropriado status.
Os tópicos a seguir descrevem ainda mais como registrar drivers intermediários:
Registrando-se como um driver intermediário do NDIS
Registrando um driver intermediário como um driver de miniporte
Registrando um driver intermediário como um driver de protocolo