Inicializando um driver miniport

Quando um dispositivo de rede fica disponível, o sistema carrega o driver de miniporta NDIS para gerenciar o dispositivo (se o driver ainda não estiver carregado). Cada driver de miniporta deve fornecer uma função DriverEntry . O sistema chama DriverEntry depois de carregar o driver. DriverEntry registra as características do driver de miniporto com o NDIS (incluindo a versão do NDIS com suporte e os pontos de entrada do driver).

O sistema passa dois argumentos para DriverEntry:

  • Um ponteiro para o objeto de driver, que foi criado pelo sistema de E/S.

  • Um ponteiro para o caminho do Registro, que especifica onde os parâmetros específicos do driver são armazenados.

Em DriverEntry, os drivers de miniporto passam esses dois ponteiros em uma chamada para a função NdisMRegisterMiniportDriver . Os drivers de miniporta exportam um conjunto de funções MiniportXxx padrão armazenando seus pontos de entrada em uma estrutura NDIS_MINIPORT_DRIVER_CHARACTERISTICS e passando essa estrutura para NdisMRegisterMiniportDriver.

DriverEntry para drivers de miniporto retorna o valor retornado pela chamada para NdisMRegisterMiniportDriver.

Um driver de miniporta também executa qualquer outra inicialização específica do driver que ele requer no DriverEntry. O driver executa a inicialização específica do adaptador na função MiniportInitializeEx . Para obter mais informações sobre a inicialização do adaptador, consulte Inicializando um adaptador.

DriverEntry pode alocar a estrutura NDIS_MINIPORT_DRIVER_CHARACTERISTICS na pilha porque a biblioteca NDIS copia as informações relevantes para seu próprio armazenamento. DriverEntry deve limpar a memória dessa estrutura com NdisZeroMemory antes de definir quaisquer valores fornecidos pelo driver em seus membros. Os membros MajorNdisVersion e MinorNdisVersion devem conter as versões principais e secundárias do NDIS compatíveis com o driver. Em cada membro doManipulador Xxx da estrutura de características, DriverEntry deve definir o ponto de entrada de uma função MiniportXxx fornecida pelo driver ou o membro deve ser NULL.

Para habilitar um driver de miniporto para configurar serviços opcionais, o NDIS chama a função MiniportSetOptions dentro do contexto da chamada do driver de miniport para NdisMRegisterMiniportDriver. Para obter mais informações sobre serviços opcionais, consulte Configurando serviços de driver de miniporto opcionais.

Os drivers que chamam NdisMRegisterMiniportDriver devem estar preparados para que o NDIS chame suas funções MiniportInitializeEx a qualquer momento após o retorno de DriverEntry . Esse driver deve ter informações suficientes de instalação e configuração armazenadas no registro ou disponíveis de chamadas para uma função de configuração específica do tipo de barramento NdisXxx para configurar todos os recursos específicos da NIC que o driver precisará para executar operações de E/S de rede.

O driver de miniporta deve eventualmente chamar NdisMDeregisterMiniportDriver para liberar recursos alocados chamando NdisMRegisterMiniportDriver. Se a inicialização do driver falhar após a chamada para NdisMRegisterMiniportDriver for bem-sucedida, o driver poderá chamar NdisMDeregisterMiniportDriver de dentro de DriverEntry. Caso contrário, o driver de miniporto deve liberar os recursos específicos do driver que ele aloca em sua função MiniportDriverUnload . Em outras palavras, se NdisMRegisterMiniportDriver não retornar NDIS_STATUS_SUCCESS, DriverEntry deverá liberar todos os recursos alocados antes de retornar o controle. O driver não será carregado se isso ocorrer. Para obter mais informações, consulte Descarregando um driver de miniporto.