Partager via


Gestionnaire d’halte du pilote Miniport

Un pilote miniport NDIS doit fournir une fonction MiniportHaltEx à NdisMRegisterMiniportDriver.

MiniportHaltEx doit annuler tout ce que MiniportInitializeEx a fait. Par exemple, le pilote miniport NDIS peut :

Le diagramme suivant illustre le déchargement d'un miniport driver.

Diagramme illustrant le processus de déchargement d’un pilote miniport.

MiniportHaltEx doit effectuer les opérations nécessaires pour décharger le pilote avant de retourner. Si le pilote miniport a des indications de réception en attente (autrement dit, reçu des données réseau qu’il a indiquées jusqu’à NDIS mais que NDIS n’a pas encore retourné), MiniportHaltEx ne doit pas retourner tant que ces données ne sont pas retournées à la fonction MiniportReturnNetBufferLists du pilote miniport .

La figure précédente montre un ensemble d’appels qui peuvent être effectués par une fonction MiniportHaltEx . Ces appels ne sont qu’un sous-ensemble des appels qui peuvent être effectués. L’ensemble réel d’appels dépend des actions précédentes du pilote miniport. Le pilote miniport peut effectuer ces mêmes appels dans MiniportInitializeEx s’il ne peut pas initialiser correctement la carte réseau en raison de problèmes matériels ou parce qu’il ne peut pas acquérir une ressource dont il a besoin. Dans ce cas, MiniportInitializeEx doit décharger le pilote en annulant ses actions précédentes. Sinon, MiniportHaltEx annule les actions de MiniportInitializeEx.

La liste suivante décrit les appels requis pour inverser certaines actions que le pilote miniport peut effectuer :

  • Si le pilote miniport a enregistré une interruption, il doit appeler NdisMDeregisterInterruptEx.

  • Si le pilote miniport a configuré un minuteur ou des minuteurs, il doit appeler NdisCancelTimerObject pour chaque minuteur qu’il a créé. Si un appel à NdisCancelTimerObject échoue, le minuteur a peut-être déjà déclenché. Dans ce cas, le pilote miniport doit attendre que le gestionnaire du minuteur se termine avant de retourner à partir de MiniportHaltEx.

  • Si le pilote miniport a alloué une mémoire avec NdisAllocateMemoryWithTagPriority, il doit appeler NdisFreeMemory pour libérer cette mémoire.

  • Si le pilote miniport a alloué une mémoire avec NdisMAllocateSharedMemory ou NdisMAllocateSharedMemoryAsyncEx, il doit appeler NdisMFreeSharedMemory pour libérer cette mémoire.

  • Si le pilote miniport a alloué et initialisé un stockage pour un pool de descripteurs de paquets avec NdisAllocateNetBufferPool, il doit appeler NdisFreeNetBufferPool pour libérer ce stockage.

  • Si le pilote miniport a alloué ou réservé des ressources matérielles, celles-ci doivent être retournées. Par exemple, si le pilote miniport a mappé une plage de ports d’E/S sur un NIC, il devrait libérer les ports en appelant NdisMDeregisterIoPortRange.

États de l’adaptateur d’un pilote de miniport

libérer un port NDIS

arrêter une d’adaptateur Miniport

états et opérations des adaptateurs Miniport

La réinitialisation du pilote Miniport et l’arrêt des fonctions