Partager via


Suspension d’un module de filtre

Pour suspendre un module de filtre en cours d’exécution, NDIS appelle la fonction FilterPause du pilote de filtre. Le module de filtre passe à l’état de suspension au début de l’exécution dans la fonction FilterPause .

NDIS suspend un module de filtre dans le cadre d’une opération de Plug-and-Play pour suspendre une pile de pilotes. Pour obtenir une vue d’ensemble de la suspension de la pile de pilotes, consultez Suspension d’une pile de pilotes.

Pour le compte d’un module de filtre à l’état de suspension , le pilote de filtre :

  • Ne doit pas provenir de nouvelles indications de réception.

    Pour plus d’informations sur les opérations d’envoi et de réception, consultez Filtrer les opérations d’envoi et de réception des modules.

  • Si des opérations de réception sont à l’origine du pilote de filtre et que NDIS n’est pas terminé, le pilote de filtre doit attendre que NDIS effectue ces opérations. L’opération de pause n’est pas terminée tant que NDIS n’appelle pas la fonction FilterReturnNetBufferLists pour toutes ces indications de réception en attente.

  • Doit retourner toute indication de réception en suspens indiquant que les pilotes sous-jacents sont immédiatement originaires de NDIS. L’opération de pause n’est pas terminée tant que le pilote n’appelle pas la fonction NdisFReturnNetBufferLists pour ces indications de réception en attente. Ces indications de réception en attente peuvent exister si le pilote met en file d’attente les mémoires tampons qu’il reçoit des pilotes sous-jacents.

  • Doit retourner de nouvelles indications de réception indiquant que les pilotes sous-jacents proviennent immédiatement de NDIS en appelant la fonction NdisFReturnNetBufferLists . Si nécessaire, le pilote peut copier les indications de réception et les mettre en file d’attente avant de les retourner.

    RemarqueNdisFReturnNetBufferLists ne doit pas être appelé pour les NBL indiquées avec NDIS_RECEIVE_FLAGS_RESOURCES’indicateur défini dans un appel FilterReceiveNetBufferLists correspondant. Ces NBL sont retournées à NDIS de manière synchrone en retournant à partir de la routine FilterReceiveNetBufferLists .

  • Ne doit pas provenir de nouvelles demandes d’envoi.

  • S’il existe des opérations d’envoi à l’origine du pilote de filtre et que NDIS n’est pas terminé, le pilote de filtre doit attendre que NDIS effectue ces opérations. L’opération de pause n’est pas terminée tant que NDIS n’appelle pas la fonction FilterSendNetBufferListsComplete pour toutes ces demandes d’envoi en attente.

  • Doit retourner immédiatement toutes les nouvelles demandes d’envoi effectuées à sa fonction FilterSendNetBufferLists en appelant la fonction NdisFSendNetBufferListsComplete . Le pilote de filtre doit définir le membre Status dans chaque structure NET_BUFFER_LIST sur NDIS_STATUS_PAUSED.

  • Peut fournir des indications status avec la fonction NdisFIndicateStatus.

    Pour plus d’informations sur les indications status, consultez Filtrer les indications d’état du module.

  • Doit gérer status indications dans sa fonction FilterStatus.

  • Doit gérer les requêtes OID dans la fonction FilterOidRequest .

    Pour plus d’informations sur les requêtes OID, consultez Filtrer les requêtes OID du module.

  • Peut lancer des requêtes OID.

  • Ne doit pas libérer les ressources allouées par le pilote pendant l’opération d’attachement.

  • Doit annuler les minuteurs, si nécessaire pour arrêter les opérations d’envoi et de réception.

    Pour plus d’informations sur les minuteurs, consultez Services du minuteur NDIS 6.0.

Une fois que le pilote de filtre a correctement suspendu les opérations d’envoi et de réception, il doit terminer l’opération de pause. Le pilote de filtre peut terminer l’opération de pause de manière synchrone ou asynchrone en retournant NDIS_STATUS_SUCCESS ou NDIS_STATUS_PENDING respectivement à partir de FilterPause.

Si le pilote retourne NDIS_STATUS_PENDING, il doit appeler la fonction NdisFPauseComplete une fois l’opération de pause terminée.

Pour le compte d’un module de filtre à l’état Suspendu , le pilote de filtre :

  • Ne doit pas provenir de nouvelles indications de réception.

  • Doit retourner de nouvelles indications de réception indiquant que les pilotes sous-jacents proviennent immédiatement de NDIS en appelant la fonction NdisFReturnNetBufferLists . Si nécessaire, le pilote peut copier les indications de réception et les mettre en file d’attente avant de les retourner.

  • Ne doit pas provenir de nouvelles demandes d’envoi.

  • Doit retourner immédiatement toutes les nouvelles demandes d’envoi effectuées à sa fonction FilterSendNetBufferLists en appelant la fonction NdisFSendNetBufferListsComplete . Le pilote de filtre doit définir le membre Status dans chaque structure NET_BUFFER_LIST sur NDIS_STATUS_PAUSED.

  • Peut fournir des indications status avec la fonction NdisFIndicateStatus.

  • Doit gérer status indications dans sa fonction FilterStatus.

  • Doit gérer les requêtes OID dans la fonction FilterOidRequest .

  • Peut lancer des requêtes OID.

NDIS ne lance pas d’autres opérations de Plug-and-Play, telles que l’attachement, le détachement ou une demande de redémarrage, alors que le pilote de filtre est à l’état de suspension. NDIS peut lancer des demandes de détachement ou de redémarrage une fois qu’un pilote de filtre est à l’état Suspendu . Pour plus d’informations sur la façon de détacher un module de filtre, consultez Détachement d’un module de filtre. Pour plus d’informations sur le redémarrage d’un module de filtre, consultez Démarrage d’un module de filtre.