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:
Portas gratuitas. (Para obter mais informações, consulte Liberando uma porta NDIS.)
Libere todos os recursos de hardware que o MiniportInitializeEx alegou.
Liberar recursos de interrupção chamando NdisMDeregisterInterruptEx.
Libere qualquer memória alocada por MiniportInitializeEx .
Interrompa a NIC, a menos que a função MiniportShutdownEx já tenha restaurado a NIC para seu estado inicial.
O diagrama a seguir ilustra o descarregamento de um driver de miniporte.
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.
Tópicos relacionados
Estados do adaptador de um driver de miniporto
Interrompendo um adaptador de miniporte