Partilhar via


Manipulador de parada do driver de miniporta

Um driver de miniporta NDIS deve fornecer uma função MiniportHaltEx para NdisMRegisterMiniportDriver.

MiniportHaltEx deve desfazer tudo o que MiniportInitializeEx fez. Por exemplo, o driver de miniporta NDIS pode:

O diagrama a seguir ilustra como descarregar um driver de miniport.

Diagrama ilustrando o processo de descarga de um driver de miniporta.

MiniportHaltEx deve concluir as operações necessárias para descarregar o driver antes de retornar. Se o driver de miniporta tiver alguma indicação de recebimento pendente (ou seja, dados de rede recebidos que ele indicou até o NDIS, mas que o NDIS ainda não retornou), o MiniportHaltEx não deve retornar até que esses dados sejam retornados para a função MiniportReturnNetBufferLists do driver de miniporta.

A figura anterior mostra um conjunto de chamadas que podem ser feitas por uma função MiniportHaltEx . Essas chamadas são apenas um subconjunto das chamadas que podem ser feitas. O conjunto atual de chamadas depende de ações anteriores do driver de miniporta. O driver de miniporta pode fazer essas mesmas chamadas em MiniportInitializeEx se não puder inicializar com êxito o adaptador de rede devido a problemas de hardware ou porque não pode adquirir um recurso de que precisa. Nesse caso, MiniportInitializeEx deve descarregar o driver desfazendo suas ações anteriores. Caso contrário, MiniportHaltEx desfará as ações de MiniportInitializeEx.

A lista a seguir descreve as chamadas necessárias para reverter determinadas ações que o driver de miniporta pode tomar:

  • Se o driver de miniporta registrou uma interrupção, ele deve chamar NdisMDeregisterInterruptEx.

  • Se o driver de miniporta configurar um temporizador ou temporizadores, ele deve chamar NdisCancelTimerObject para cada temporizador que criou. Se uma chamada para NdisCancelTimerObject falhar, o temporizador pode já ter sido acionado. Nesse caso, o driver de miniporta deve aguardar a conclusão do manipulador de temporizador antes de retornar do MiniportHaltEx.

  • Se o driver de miniporta alocou qualquer memória com NdisAllocateMemoryWithTagPriority, ele deve chamar NdisFreeMemory para liberar essa memória.

  • Se o driver de miniporta alocou qualquer memória com NdisMAllocateSharedMemory ou NdisMAllocateSharedMemoryAsyncEx, ele deve chamar NdisMFreeSharedMemory para liberar essa memória.

  • Se o driver de miniporta tiver alocado e inicializado o armazenamento para um pool de descritores de pacotes com NdisAllocateNetBufferPool, deve chamar NdisFreeNetBufferPool para liberar esse armazenamento.

  • Se o driver da miniporta alocou ou reservou quaisquer recursos de hardware, eles devem ser retornados. Por exemplo, se o driver de miniporta mapeou um intervalo de portas de E/S em uma NIC, ele deve liberar as portas chamando NdisMDeregisterIoPortRange.

Estados de Adaptador de um Miniport Driver

Liberando uma porta NDIS

Desativando um adaptador Miniport

Estados e Operações do Adaptador de Miniporta

Funções de Redefinição e Parada do Driver de Miniporta