MINIPORT_RESTART fonction de rappel (ndis.h)
La fonction MiniportRestart lance une demande de redémarrage pour un adaptateur miniport qui est suspendu.
Syntaxe
MINIPORT_RESTART MiniportRestart;
NDIS_STATUS MiniportRestart(
[in] NDIS_HANDLE MiniportAdapterContext,
PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}
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.
RestartParameters
Pointeur vers un NDIS_MINIPORT_RESTART_PARAMETERS structure qui définit les paramètres de redémarrage de l’adaptateur miniport.
Valeur retournée
MiniportRestart retourne l’une des valeurs status suivantes :
Code de retour | Description |
---|---|
|
MiniportRestart a correctement redémarré le flux de données réseau via l’adaptateur miniport. |
|
MiniportRestart n’a pas terminé l’opération de redémarrage et l’opération sera effectuée de manière asynchrone. Le pilote miniport doit appeler la fonction NdisMRestartComplete une fois l’opération terminée. |
|
MiniportRestart a échoué en raison de ressources insuffisantes. |
|
Aucune des valeurs status précédentes ne s’applique. Dans ce cas, le pilote doit appeler la fonction NdisWriteErrorLogEntry avec des paramètres qui spécifient la raison de l’échec. |
Remarques
Un pilote spécifie le point d’entrée MiniportRestart lorsqu’il appelle le Fonction NdisMRegisterMiniportDriver .
L’adaptateur miniport spécifié par le paramètre MiniportAdapterContext passe à l’état Restarting lorsque NDIS appelle MiniportRestart.
Lorsque NDIS appelle MiniportRestart, un pilote miniport :
- Doit effectuer toutes les tâches requises pour reprendre les opérations d’envoi et de réception.
- Modifie éventuellement les attributs de redémarrage spécifiés dans le membre RestartAttributes du NDIS_MINIPORT_RESTART_PARAMETERS structure. Si le pointeur dans RestartAttributes a la valeur NULL, le pilote miniport ne doit pas modifier ou ajouter à la liste des attributs de redémarrage. Si le pointeur dans RestartAttributes n’est pas NULL, il pointe vers une structure NDIS_RESTART_ATTRIBUTES . Si un pilote miniport ne redémarre pas, il ne doit pas modifier d’attributs.
- Peut fournir des indications status avec le Fonction NdisMIndicateStatusEx .
- Doit gérer status demandes dans la fonction MiniportOidRequest.
- Peut ajouter de nouveaux attributs spécifiques au média à la liste des attributs de redémarrage. Dans ce cas, le pilote miniport doit allouer un nouveau NDIS_RESTART_ATTRIBUTES structure, par exemple, avec le Fonction NdisAllocateMemoryWithTagPriority et fournir de l’espace mémoire pour les nouveaux attributs. Après avoir propagé les attributs de redémarrage à des pilotes sur-mentants, NDIS libère la mémoire des attributs pour les pilotes miniport.
- Peut modifier les attributs spécifiques au média dans la liste des attributs de redémarrage. Si le pilote miniport nécessite plus d’espace mémoire, il peut libérer une structure NDIS_RESTART_ATTRIBUTES avec la fonction NdisFreeMemory et allouer une nouvelle structure pour contenir les informations modifiées. Après avoir propagé les attributs de redémarrage à des pilotes sur-mentants, NDIS libère la mémoire des attributs pour les pilotes miniport.
- Peut modifier n’importe quel champ dans le NDIS_RESTART_GENERAL_ATTRIBUTES structure. Quand NDIS fournit un pointeur non NULL dans le membre RestartAttributes du NDIS_MINIPORT_RESTART_PARAMETERS structure, la liste d’attributs contient une entrée dans laquelle le membre Oid de la structure NDIS_RESTART_ATTRIBUTES est OID_GEN_MINIPORT_RESTART_ATTRIBUTES et le membre Data contient une structure NDIS_RESTART_GENERAL_ATTRIBUTES.
- Doit vous assurer que le NDIS_RESTART_GENERAL_ATTRIBUTES structure contient les informations correctes. Pour vous assurer que la structure NDIS_RESTART_GENERAL_ATTRIBUTES contient les informations requises, vous devez d’abord déterminer la version de la structure en vérifiant le membre Revision dans la structure NDIS_OBJECT_HEADER spécifiée dans le membre d’en-tête de la structure NDIS_RESTART_GENERAL_ATTRIBUTES.
Une fois que le pilote miniport a correctement redémarré les opérations d’envoi et de réception, il doit terminer l’opération de redémarrage. Si le pilote retourne NDIS_STATUS_SUCCESS à partir de MiniportRestart, l’opération de redémarrage est terminée. Si le pilote retourne NDIS_STATUS_PENDING, il peut poursuivre les opérations de redémarrage. L’opération de redémarrage est terminée une fois que le pilote a appelé la fonction NdisMRestartComplete . Une fois l’opération de redémarrage terminée, l’adaptateur miniport est à l’état En cours d’exécution .
Le pilote miniport peut reprendre l’indication des paquets reçus pour l’adaptateur miniport immédiatement après que NDIS a appelé MiniportRestart et avant que le pilote appelle NdisMRestartComplete. Le pilote miniport doit être prêt à accepter les demandes d’envoi une fois que le pilote a terminé la demande de redémarrage.
Si le pilote miniport ne redémarre pas les opérations d’envoi et de réception, le pilote doit retourner un status d’échec approprié à partir de MiniportRestart. Dans ce cas, le pilote doit arrêter toutes les opérations d’envoi ou de réception qui ont été démarrées , puis revenir à l’état Suspendu.
NDIS appelle MiniportRestart à IRQL = PASSIVE_LEVEL.
Exemples
Pour définir une fonction MiniportRestart , 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, au vérificateur de pilotes statiques (SDV) et à d’autres outils de vérification de trouver des erreurs. 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 MiniportRestart nommée « MyRestart », utilisez le type MINIPORT_RESTART comme indiqué dans cet exemple de code :
MINIPORT_RESTART MyRestart;
Ensuite, implémentez votre fonction comme suit :
_Use_decl_annotations_
NDIS_STATUS
MyRestart(
NDIS_HANDLE MiniportAdapterContext,
PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}
Le type de fonction MINIPORT_RESTART 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_RESTART 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 |