Compartilhar via


Manipulando a remoção surpresa de uma NIC

Uma remoção surpresa ocorre quando um usuário remove uma NIC (cartão de interface de rede) de um sistema em execução sem notificar o sistema com antecedência por meio da interface do usuário.

Drivers de miniporta para Windows Vista e versões posteriores do sistema operacional devem ser capazes de lidar com remoções surpresa. Em particular, os drivers de miniporto NDIS com uma borda inferior do WDM (Modelo de Driver do Windows) devem ser capazes de lidar com esses eventos. Se um motorista de miniporta NDIS-WDM não lidar com uma remoção surpresa, todos os IRPs pendentes que o motorista do miniporto enviou ao motorista de ônibus subjacente antes da remoção surpresa não podem ser concluídos.

Para o Windows Vista e versões posteriores, um driver de miniporta (como um driver de miniporta com uma borda inferior do WDM) que não controla o hardware diretamente deve definir o sinalizador de atributo NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK ao chamar NdisMSetMiniportAttributes. Definir esse sinalizador impede que um aviso seja exibido quando um usuário executa uma remoção surpresa de uma NIC. Um driver de miniporta que não pode lidar com uma remoção surpresa não deve definir esse sinalizador.

Um driver de miniporta que dá suporte à remoção surpresa deve tentar detectar uma remoção surpresa durante operações normais , fora do contexto de MiniportDevicePnPEventNotify. Depois que uma NIC é removida, uma tentativa de ler as portas de E/S de uma NIC normalmente resulta em valores retornados que têm todos os bits definidos como um. Se um driver de miniporta ler esse valor, ele deverá marcar para a presença do hardware com um teste mais conclusivo. Por exemplo, o driver de miniporto pode gravar um valor em uma porta de E/S e tentar ler o valor dessa porta. O driver de miniporta também pode marcar para valores válidos nos registros de E/S da NIC. Detectar uma remoção surpresa de tal forma impede que o driver de miniporta se pendure em um loop infinito quando tenta ler os registros de uma NIC removida em um DPC de interrupção. Um driver de miniporto que para de responder dessa forma impede que o NDIS chame a função MiniportDevicePnPEventNotify do driver.