Compartilhar via


Ativando uma porta NDIS

Depois que um driver de miniporto aloca com êxito uma porta NDIS e, antes de usar o número da porta em funções NDIS, o driver deve ativar a porta. Para ativar a porta, o driver de miniporto envia um evento de Plug and Play de ativação de porta (PnP) para o NDIS. Para enviar o evento PnP de ativação de porta, os drivers de miniport usam o código de evento PnP NetEventPortActivation na chamada para a função NdisMNetPnPEvent .

Para ativar portas, o driver de miniporto deve definir os membros da estrutura NET_PNP_EVENT_NOTIFICATION para a qual o parâmetro NetPnPEvent de NdisMNetPnPEvent aponta para o seguinte:

Número_da_porta
A porta de origem da notificação de evento. Defina esse membro como zero porque os números da porta são fornecidos no membro buffer da estrutura especificada pelo membro NetPnPEvent .

NetPnPEvent
Uma estrutura NET_PNP_EVENT que descreve o evento de ativação de porta. Defina os membros dessa estrutura da seguinte maneira:

NetEvent
Um código de evento que descreve o evento. Defina esse membro como NetEventPortActivation.

Buffer
Um ponteiro para uma lista vinculada de estruturas de NDIS_PORT . O membro Next das estruturas de NDIS_PORT aponta para a próxima estrutura NDIS_PORT na lista.

BufferLength
O número de bytes especificados no Buffer . Defina BufferLength como o tamanho das estruturas de NDIS_PORT.

Outros membros
Defina os membros restantes do NET_PNP_EVENT como NULL.

O driver de miniporto lista as portas que alteraram os estados de inativos para ativos em uma lista vinculada de estruturas de NDIS_PORT . No entanto, se a porta padrão de um adaptador de miniporto for o destino de um evento PnP NetEventPortActivation , a porta padrão deverá ser a única porta na lista.

Quando o driver de miniporto notifica o NDIS da ativação de uma porta (e possivelmente antes que essa chamada de notificação retorne), o driver de miniporto deve estar pronto para lidar com solicitações de envio e solicitações OID associadas à porta. Os drivers de miniporto não devem usar o número da porta de uma porta recém-ativada em status ou receber indicações até que a chamada para NdisMNetPnPEvent retorne.

O NDIS não notifica os drivers subjacentes sobre portas ativadas até que a porta padrão esteja ativa. Quando o NDIS chama a função ProtocolBindAdapterEx de um driver de protocolo, o NDIS fornece uma lista de todas as portas ativas no momento no membro ActivePorts da estrutura NDIS_BIND_PARAMETERS para a qual o parâmetro BindParameters aponta. Quando um driver de miniporto ativa novas portas, o NDIS notifica todos os drivers de protocolo associados ao driver de miniporto com o evento PnP NetEventPortActivation . Para obter mais informações sobre como lidar com esses eventos de ativação de porta em um driver de protocolo, consulte Manipulando o evento PnP de ativação de porta.

Antes que um driver de miniporto aloque uma porta NDIS, o driver deve chamar a função NdisMSetMiniportAttributes para definir os atributos de registro na estrutura NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . Os drivers de miniport podem controlar a ativação da porta padrão definindo o sinalizador de atributo NDIS_MINIPORT_CONTROLS_DEFAULT_PORT quando chamam NdisMSetMiniportAttributes. Se um driver de miniporto assumir a responsabilidade de ativar a porta padrão, o NDIS não iniciará a associação entre o adaptador de miniporte e os drivers sobrepostos até que o driver de miniporte ative a porta padrão com o evento PnP de ativação da porta.

Todas as portas especificadas pela lista vinculada de estruturas de NDIS_PORT devem estar no estado alocado. Um driver de miniporte não deve tentar ativar uma porta que já esteja ativa; se o driver tentar ativar uma porta ativa, o NDIS tratará a situação como uma falha de ativação de porta.

Se o NDIS não ativar nenhuma porta na lista, ele falhará na chamada para NdisMNetPnPEvent e nenhuma das portas na lista alterará o estado para o estado ativado. Se o NDIS falhar ao ativar as portas porque algumas das portas não existem, NdisMNetPnPEvent retornará um valor retornado NDIS_STATUS_INVALID_PORT. Se o NDIS não ativar as portas porque algumas das portas não estão no estado alocado, NdisMNetPnPEvent retorna um valor retornado NDIS_STATUS_INVALID_PORT_STATE.

Depois que uma porta for ativada com êxito, a porta estará no estado ativado. Os drivers de miniport podem indicar dados recebidos e status para uma porta no estado ativado.

O NDIS passa o estado de autenticação da porta padrão para a função MiniportInitializeEx no membro DefaultPortAuthStates da estrutura NDIS_MINIPORT_INIT_PARAMETERS . Se um driver de miniporto controlar a porta padrão, quando o driver de miniporto ativar a porta padrão, ele poderá ativar a porta padrão usando as configurações de autenticação padrão. Para usar as configurações de autenticação padrão, defina o sinalizador NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS no membro Flags da estrutura NDIS_PORT_CHARACTERISTICS . Os drivers de miniport podem usar o sinalizador NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS para as portas que alocam e ativam. Para o caso de ativação, o NDIS atribui os estados de autenticação padrão à porta recém-ativada e ignora os estados de autenticação que são passados para NdisMNetPnPEvent para o evento NetEventPortActivation .

Para obter mais informações sobre como controlar a porta padrão e alocar portas, consulte Alocando portas NDIS.