Gestore interruzione driver Miniport

Un driver miniport NDIS deve fornire una funzione MiniportHaltEx a NdisMRegisterMiniportDriver.

MiniportHaltEx dovrebbe annullare tutto ciò che miniportInitializeEx ha fatto. Ad esempio, il driver miniport NDIS potrebbe:

Il diagramma seguente illustra lo scaricamento di un driver miniport.

Diagramma che illustra il processo di scaricamento di un driver miniport.

MiniportHaltEx deve completare le operazioni necessarie per scaricare il driver prima di tornare. Se il driver miniport ha indicazioni di ricezione in sospeso (ovvero, dati di rete ricevuti che ha indicato fino a NDIS ma che NDIS non ha ancora restituito), MiniportHaltEx non deve restituire fino a quando tali dati non vengono restituiti alla funzione MiniportReturnNetBufferLists del driver miniport .

La figura precedente mostra un set di chiamate che possono essere effettuate da una funzione MiniportHaltEx . Queste chiamate sono solo un subset delle chiamate che possono essere effettuate. Il set effettivo di chiamate dipende dalle azioni precedenti del driver miniport. Il driver miniport può effettuare queste stesse chiamate in MiniportInitializeEx se non può inizializzare correttamente la scheda di rete a causa di problemi hardware o perché non può acquisire una risorsa necessaria. In tal caso , MiniportInitializeEx dovrebbe scaricare il driver annullando le azioni precedenti. In caso contrario , MiniportHaltEx annulla le azioni di MiniportInitializeEx.

Nell'elenco seguente vengono descritte le chiamate necessarie per invertire determinate azioni che il driver miniport può eseguire:

  • Se il driver miniport ha registrato un interrupt, deve chiamare NdisMDeregisterInterruptEx.

  • Se il driver miniport configura un timer o timer, deve chiamare NdisCancelTimerObject per ogni timer creato. Se una chiamata a NdisCancelTimerObject ha esito negativo, è possibile che il timer sia già stato attivato. In questo caso, il driver miniport deve attendere il completamento del gestore timer prima di tornare da MiniportHaltEx.

  • Se il driver miniport ha allocato memoria con NdisAllocateMemoryWithTagPriority, deve chiamare NdisFreeMemory per liberare tale memoria.

  • Se il driver miniport ha allocato memoria con NdisMAllocateSharedMemory o NdisMAllocateSharedMemoryAsyncEx, deve chiamare NdisMFreeSharedMemory per liberare tale memoria.

  • Se il driver miniport allocato e inizializzato per un pool di descrittori di pacchetti con NdisAllocateNetBufferPool, deve chiamare NdisFreeNetBufferPool per liberare tale archiviazione.

  • Se il driver miniport allocato o riservato qualsiasi risorsa hardware, questi devono essere restituiti. Ad esempio, se il driver miniport ha eseguito il mapping di un intervallo di porte di I/O in una scheda di interfaccia di rete, deve rilasciare le porte chiamando NdisMDeregisterIoPortRange.

Stati dell'adattatore di un driver Miniport

Liberamento di una porta NDIS

Interruzione di un adattatore Miniport

Stati e operazioni dell'adattatore Miniport

Funzioni di ripristino e interruzione del driver Miniport