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 pilote miniport.

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 revenir. Si le pilote miniport a des indications de réception en attente (c’est-à-dire des données réseau reçues qu’il a indiquées jusqu’à NDIS mais que NDIS n’a pas encore retournées), MiniportHaltEx ne doit pas retourner ces données 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 configure 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 revenir de MiniportHaltEx.

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

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

  • Si le pilote miniport a alloué et initialisé le 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 mappé une plage de ports d’E/S sur une carte réseau, il doit libérer les ports en appelant NdisMDeregisterIoPortRange.

États de l’adaptateur d’un pilote Miniport

Libération d’un port NDIS

Arrêt d’un adaptateur Miniport

États et opérations de l’adaptateur Miniport

Fonctions de réinitialisation et d’arrêt du pilote Miniport