Ativando uma porta NDIS
Depois que um driver de miniporta aloca com êxito uma porta NDIS e antes de usar o número da porta nas funções NDIS, o driver deve ativar a porta. Para ativar a porta, o driver da miniporta envia um evento Plug and Play (PnP) de ativação de porta para o NDIS. Para enviar o evento PnP de ativação de porta, os drivers da miniporta utilizam o código de evento PnP NetEventPortActivation na chamada para a função NdisMNetPnPEvent.
Para ativar as portas, o driver de miniporta deve definir os membros da estrutura NET_PNP_EVENT_NOTIFICATION que o parâmetro NetPnPEvent de NdisMNetPnPEvent aponta da seguinte maneira:
PortNumber
A porta de origem da notificação de evento. Defina esse membro como zero porque os números de porta são fornecidos no Buffer membro da estrutura que o NetPnPEvent membro especifica.
NetPnPEvent
Uma estrutura NET_PNP_EVENT que descreve o evento de ativação da porta. Defina os membros desta estrutura da seguinte forma:
NetEvent
Um código de evento que descreve o evento. Defina este membro como NetEventPortActivation.
Memória Temporária
Um ponteiro para uma lista vinculada de estruturas NDIS_PORT. O seguinte membro da estrutura NDIS_PORT aponta para a próxima estrutura NDIS_PORT na lista.
BufferLength
O número de bytes especificados em Buffer . Defina BufferLength para o tamanho das estruturas NDIS_PORT.
Outros membros
Defina os membros restantes do NET_PNP_EVENT como NULL.
O driver de miniporta lista as portas que mudaram de estados de inativos para ativos em uma lista vinculada de estruturas NDIS_PORT. No entanto, se a porta padrão de um adaptador de miniporta for o destino de um NetEventPortActivation evento PnP, a porta padrão deverá ser a única porta na lista.
Quando o driver de miniporta notifica o NDIS sobre a ativação de uma porta (e possivelmente antes que essa chamada de notificação retorne), o driver de miniporta deve estar pronto para lidar com solicitações de envio e solicitações OID associadas à porta. Os drivers de miniporta não devem usar o número da porta de uma porta recém-ativada no status ou receber indicações até que a chamada para NdisMNetPnPEvent retorne.
O NDIS não notifica os drivers subjacentes sobre as 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 atualmente ativas no ActivePorts membro da estrutura de NDIS_BIND_PARAMETERS para a qual o parâmetro BindParameters aponta. Quando um driver de miniporta ativa novas portas, o NDIS notifica todos os drivers de protocolo vinculados ao driver de miniporta com o evento PnP NetEventPortActivation. Para obter mais informações sobre como manipular esses eventos de ativação de porta em um driver de protocolo, consulte Manipulando o evento PnP de ativação de porta.
Antes de um miniport driver alocar 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 miniporta 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 miniporta assumir a responsabilidade pela ativação da porta padrão, o NDIS não iniciará a ligação entre o adaptador de miniporta e os drivers sobrepostos até que o driver de miniporta ative a porta padrão com o evento PnP de ativação da porta.
Todas as portas especificadas pela lista vinculada de estruturas NDIS_PORT devem estar no estado alocado. Um driver de miniporta 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 mudará de estado para o estado ativado. Se o NDIS falhar em ativar as portas porque algumas portas não existem, NdisMNetPnPEvent devolve um valor de retorno NDIS_STATUS_INVALID_PORT. Se o NDIS não conseguir ativar as portas porque algumas portas não estão no estado alocado, NdisMNetPnPEvent retornará um valor de retorno NDIS_STATUS_INVALID_PORT_STATE.
Depois que uma porta for ativada com êxito, ela estará no estado ativado. Os drivers de miniporta podem indicar os dados recebidos e o status de uma porta no estado ativado.
O NDIS passa o estado de autenticação da porta padrão para a função MiniportInitializeEx através do membro DefaultPortAuthStates da estrutura NDIS_MINIPORT_INIT_PARAMETERS. Se um driver de miniporta controlar a porta padrão, quando o driver de miniporta 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 de Flags da estrutura NDIS_PORT_CHARACTERISTICS. Os drivers de miniportas podem usar o indicador NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS para as portas que eles 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 Allocating NDIS Ports.