Compartilhar via


Manipulador de Parada do Driver de Miniporto

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

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

O diagrama a seguir ilustra o descarregamento de um driver miniport.

Diagrama ilustrando o processo de desinstalação de um driver miniport.

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

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 real de chamadas depende de ações anteriores do driver de miniporto. O driver de miniporto pode fazer essas mesmas chamadas no MiniportInitializeEx se não conseguir inicializar com êxito o adaptador de rede devido a problemas de hardware ou porque ele não pode adquirir um recurso necessário. Nesse caso, MiniportInitializeEx deve descarregar o driver desfazendo suas ações anteriores. Caso contrário, MiniportHaltEx desfazerá as ações de MiniportInitializeEx.

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

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

  • Se o driver de miniporto configurar um ou mais temporizadores, ele deve chamar NdisCancelTimerObject para cada temporizador que criar. Se uma chamada para NdisCancelTimerObject falhar, o temporizador poderá já ter sido disparado. Nesse caso, o driver de miniporto deve esperar que o manipulador de temporizador conclua antes de retornar do MiniportHaltEx.

  • Se o driver de miniporto alocou alguma memória com NdisAllocateMemoryWithTagPriority, ele deverá chamar NdisFreeMemory para liberar essa memória.

  • Se o driver de miniporto alocar qualquer memória com NdisMAllocateSharedMemory ou NdisMAllocateSharedMemoryAsyncEx, ele deverá chamar NdisMFreeSharedMemory para liberar essa memória.

  • Se o driver de miniporto alocou e inicializou o armazenamento para um pool de descritores de pacotes com NdisAllocateNetBufferPool, ele deverá chamar NdisFreeNetBufferPool para liberar esse armazenamento.

  • Se o driver de miniporto alocar ou reservar quaisquer recursos de hardware, eles deverão ser retornados. Por exemplo, se o driver de miniporto mapeou um intervalo de portas I/O em uma NIC, ele deve liberar as portas chamando a função NdisMDeregisterIoPortRange.

estados do adaptador de um de driver de miniporto

liberando uma porta NDIS

Parando um adaptador de miniporto

de estados e operações do adaptador de miniporto

Funções de redefinição e suspensão do driver de miniporta