MINIPORT_HALT fonction de rappel (ndis.h)
NDIS appelle la fonction MiniportHaltEx d’un pilote miniport pour libérer des ressources lorsqu’un adaptateur miniport est supprimé et pour arrêter le matériel. Cette fonction place le miniport à l’état Arrêté, où aucun autre rappel ne peut se produire (y compris MiniportShutdownEx). Pour plus d’informations sur les états des pilotes miniports, consultez États et opérations de l’adaptateur miniport.
Syntaxe
MINIPORT_HALT MiniportHalt;
void MiniportHalt(
[in] NDIS_HANDLE MiniportAdapterContext,
[in] NDIS_HALT_ACTION HaltAction
)
{...}
Paramètres
[in] MiniportAdapterContext
Handle à une zone de contexte que le pilote miniport a allouée dans sa fonction MiniportInitializeEx . Le pilote miniport utilise cette zone de contexte pour conserver les informations d’état d’un adaptateur miniport.
[in] HaltAction
Raison de l’arrêt de l’adaptateur miniport. Ce peut être l’une des valeurs suivantes :
NdisHaltDeviceDisabled
NDIS arrête l’adaptateur miniport en réponse à un message de suppression de Plug-and-Play (PnP).
NdisHaltDeviceInstanceDeInitialized
NDIS arrête l’adaptateur miniport en réponse à un pilote intermédiaire appelant le Fonction NdisIMDeInitializeDeviceInstance .
NdisHaltDevicePoweredDown
NDIS arrête l’adaptateur miniport, car le système passe à un état de veille.
NdisHaltDeviceSurpriseRemoved
L’adaptateur miniport a été supprimé par surprise et le matériel n’est pas présent.
NdisHaltDeviceFailed
L’adaptateur miniport est en cours de suppression en raison d’une défaillance matérielle. Le pilote miniport appelé fonction NdisMRemoveMiniport ou un pilote de bus n’a pas allumé la carte réseau lors de la reprise.
NdisHaltDeviceInitializationFailed
NDIS n’a pas pu initialiser l’adaptateur miniport pour une raison inconnue une fois la fonction MiniportInitializeEx terminée avec succès.
NdisHaltDeviceStopped
NDIS arrête l’adaptateur miniport en réponse à un message d’arrêt pnP d’appareil.
Valeur de retour
None
Remarques
Un pilote spécifie le point d’entrée MiniportHaltEx lorsqu’il appelle le Fonction NdisMRegisterMiniportDriver .
NDIS peut appeler MiniportHaltEx à tout moment une fois que la fonction MiniportInitializeEx d’un pilote est retournée avec succès. Si le pilote contrôle une carte réseau physique, MiniportHaltEx doit arrêter la carte réseau. Si un pilote intermédiaire NDIS appelle le Fonction NdisIMDeInitializeDeviceInstance , NDIS appelle la fonction MiniportHaltEx pour l’appareil virtuel du pilote.
MiniportHaltEx doit libérer toutes les ressources qui ont été allouées dans MiniportInitializeEx pour un appareil. MiniportHaltEx libère également toutes les autres ressources que le pilote a allouées dans les opérations suivantes pour cet appareil. Le pilote doit appeler les réciproques des fonctions NdisXxx avec lesquelles il a initialement alloué les ressources. En règle générale, une fonction MiniportHaltEx doit appeler les fonctions NdisXxx réciproques dans l’ordre inverse des appels effectués par le pilote à partir de MiniportInitializeEx.
Si une carte réseau génère des interruptions, la fonction MiniportHaltEx d’un pilote miniport peut être préemptée par la fonction MiniportInterrupt du pilote jusqu’à ce que l’appel MiniportHaltEx à La fonction NdisMDeregisterInterruptEx retourne. La fonction MiniportHaltEx d’un tel pilote doit désactiver les interruptions et appeler NdisMDeregisterInterruptEx dès que possible. Notez qu’un pilote peut continuer à recevoir des interruptions jusqu’à ce que NdisMDeregisterInterruptEx retourne. NdisMDeregisterInterruptEx ne retourne pas tant que le pilote n’a pas terminé tous les PDC planifiés (voir la fonction MiniportInterruptDPC pour plus d’informations).
Si le pilote a une fonction NetTimerCallback associée à un objet de minuteur qui peut se trouver dans la file d’attente du minuteur système, MiniportHaltEx doit appeler la fonction NdisCancelTimerObject . Si NdisCancelTimerObject échoue, le minuteur aurait peut-être déjà déclenché. Dans ce cas, le pilote doit attendre que la fonction de minuteur se termine avant que le pilote ne retourne à partir de MiniportHaltEx.
NDIS n’appelle pas MiniportHaltEx s’il y a des demandes OID en suspens ou des demandes d’envoi. NDIS n’envoie aucune autre demande pour l’appareil affecté après que NDIS a appelé MiniportHaltEx.
Si le pilote doit attendre la fin d’une opération, MiniportHaltEx peut utiliser la fonction NdisWaitEvent ou la fonction NdisMSleep .
NDIS appelle MiniportHaltEx à IRQL = PASSIVE_LEVEL.
Exemples
Pour définir une fonction MiniportHaltEx , vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction que vous définissez. Windows fournit un ensemble de types de fonctions pour les pilotes. La déclaration d’une fonction à l’aide des types de fonction permet à l’analyse du code pour les pilotes, le vérificateur de pilotes statique (SDV) et d’autres outils de vérification de trouver les erreurs, et il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.Par exemple, pour définir une fonction MiniportHaltEx nommée « MyHaltEx », utilisez le type MINIPORT_HALT comme indiqué dans cet exemple de code :
MINIPORT_HALT MyHaltEx;
Ensuite, implémentez votre fonction comme suit :
_Use_decl_annotations_
VOID
MyHaltEx(
NDIS_HANDLE MiniportAdapterContext,
NDIS_HALT_ACTION HaltAction
)
{...}
Le type de fonction MINIPORT_HALT est défini dans le fichier d’en-tête Ndis.h. Pour identifier plus précisément les erreurs lors de l’exécution des outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction MINIPORT_HALT dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes NDIS.
Pour plus d’informations sur Use_decl_annotations, consultez Annotating Function Behavior.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge dans NDIS 6.0 et versions ultérieures. |
Plateforme cible | Windows |
En-tête | ndis.h (inclure Ndis.h) |
IRQL | PASSIVE_LEVEL |
Règles de conformité DDI | WlanAssociation, WlanConnectionRoaming, WlanDisassociation, WlanTimedAssociation, WlanTimedConnectionRoaming, WlanTimedConnectRequest, WlanTimedLinkQuality, WlanTimedScan |
Voir aussi
États de l’adaptateur d’un pilote Miniport
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
MiniportReturnNetBufferLists NdisIMDeInitializeDeviceInstance