Compartilhar via


Desativando uma porta NDIS

Para desativar portas NDIS, um driver de miniporto envia um evento PnP (Plug and Play de desativação de porta) para o NDIS. Depois que um driver de miniporto ativa uma porta com êxito, o driver deve desativar a porta antes que ela possa liberar a porta. Além disso, o driver pode desativar uma porta por motivos específicos do aplicativo. Uma porta pode ser reativada depois de desativada, mas uma porta não pode ser reativada se for liberada.

Para enviar um evento PnP de desativação de porta, os drivers de miniport usam o código de evento PnP NetEventPortDeactivation na chamada para a função NdisMNetPnPEvent . Para desativar portas, o driver de miniporto deve definir os membros da estrutura NET_PNP_EVENT_NOTIFICATION para os quais o parâmetro NetPnPEvent de NdisMNetPnPnPEvent 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 desativação da porta. Defina os membros dessa estrutura da seguinte maneira:

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

Buffer
Um ponteiro para uma matriz de elementos do tipo NDIS_PORT_NUMBER. A matriz contém os números de porta de todas as portas que o driver de miniporto está desativando.

BufferLength
O número de bytes especificados no Buffer . Defina BufferLength como o tamanho da matriz para a qual o Buffer aponta. Para obter o número de elementos na matriz, divida o valor em BufferLength pelo tamanho do tipo de dados NDIS_PORT_NUMBER.

Outros membros
Defina os membros restantes do NET_PNP_EVENT como NULL.

Um driver de miniporte pode fornecer uma matriz com uma lista de portas para desativar. No entanto, se a porta padrão de um adaptador de miniporto for o destino de um evento PnP NetEventPortDeactivation , a porta padrão deverá ser a única porta especificada na matriz.

Os drivers de miniport podem desativar portas ativas a qualquer momento. No entanto, antes que um driver de miniporte desative uma porta, ele deve garantir que não haja indicações de status pendentes ou receber indicações associadas a essa porta. Depois que o driver de miniporto envia o evento PnP de desativação da porta, ele não deve iniciar nenhuma status ou receber indicações associadas às portas desativadas.

Um driver de miniporte também pode reativar uma porta. Para obter mais informações sobre como ativar portas NDIS, consulte Ativando portas NDIS.

Quando um driver de miniporto desativa portas, o NDIS notifica todos os drivers de protocolo associados ao driver de miniporto com o evento PnP NetEventPortDeactivation . Esse evento PnP lista as portas que foram alteradas para o estado alocado e não inclui portas que já estão desativadas. Para obter mais informações sobre como lidar com eventos de desativação de porta em um driver de protocolo, consulte Manipulando o evento PnP de desativaçã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 e o driver de miniporto ativou a porta padrão, ele deverá desativar a porta padrão antes de retornar da função MiniportHaltEx .

Todas as portas especificadas pela matriz de elementos NDIS_PORT_NUMBER devem estar no estado ativado. Um driver de miniporte não deve tentar desativar uma porta que já foi desativada.

Se o NDIS não desativar nenhuma porta na matriz de portas, nenhuma das portas na matriz de portas alterará o estado. Se a desativação falhar porque algumas das portas especificadas não existem, a função NdisMNetPnPnPEvent retornará o valor retornado NDIS_STATUS_INVALID_PORT. Se a desativação falhar porque algumas das portas não estão no estado ativado, NdisMNetPnPEvent retornará o valor retornado NDIS_STATUS_INVALID_PORT_STATE.

Até que a chamada para NdisMNetPnPEvent retorne, uma porta não será desativada e os drivers de miniport devem ser capazes de lidar com solicitações OID e enviar solicitações associadas a essa porta.

Quando um driver de miniporta desativa a porta padrão, o NDIS fecha todas as associações entre os drivers de protocolo sobressocientes e o adaptador de miniporte. Se um driver de miniporto tentar desativar a porta padrão e a porta padrão já estiver desativada, NdisMNetPnPEvent falhará e retornará o valor retornado NDIS_STATUS_INVALID_PORT_STATE. Se um driver de miniporto tentar desativar a porta padrão e a porta padrão não for a única porta especificada na matriz de elementos NDIS_PORT_NUMBER, NdisMNetPnPEvent falhará e retornará o valor retornado NDIS_STATUS_INVALID_PORT. Se um driver de miniporte definir o membro Buffer como NULL ou membro BufferLength como zero, o NDIS falhará na chamada NdisMNetPnPEvent e retornará o valor retornado NDIS_STATUS_INVALID_PARAMETER.

Depois que uma porta é desativada com êxito, a porta está no estado alocado. Os drivers de miniporto não podem indicar dados recebidos ou status para a porta no estado alocado.