Compartilhar via


Manipulador de parada de 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 de miniporto NDIS pode:

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

Diagrama ilustrando o processo de descarregamento de um driver de miniporto.

MiniportHaltEx deve concluir as operações necessárias para descarregar o driver antes de retornar. Se o driver de miniporto tiver quaisquer indicações de recebimento pendentes (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 miniport. O driver de miniporte poderá fazer essas mesmas chamadas no MiniportInitializeEx se não puder 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 miniporte registrou uma interrupção, ele deve chamar NdisMDeregisterInterruptEx.

  • Se o driver de miniporte configurar um temporizador ou temporizador, ele deverá chamar NdisCancelTimerObject para cada temporizador criado. Se uma chamada para NdisCancelTimerObject falhar, o temporizador poderá já ter sido disparado. Nesse caso, o driver de miniporto deve aguardar a conclusão do manipulador de temporizador antes de retornar de MiniportHaltEx.

  • Se o driver de miniporto alocar qualquer 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 alocar e inicializar o armazenamento para um pool de descritores de pacote com NdisAllocateNetBufferPool, ele deverá chamar NdisFreeNetBufferPool para liberar esse armazenamento.

  • Se o driver de miniporto tiver alocado ou reservado recursos de hardware, eles deverão ser retornados. Por exemplo, se o driver de miniporto mapeou um intervalo de portas de E/S em uma NIC, ele deve liberar as portas chamando NdisMDeregisterIoPortRange.

Estados do adaptador de um driver de miniporto

Liberando uma porta NDIS

Interrompendo um adaptador de miniporte

Estados e operações do adaptador miniport

Funções de redefinição e interrupção do driver de miniport