États et opérations de file d’attente

Pour chaque file d’attente, une carte réseau doit prendre en charge l’ensemble d’états opérationnels suivants :

Indéfini
La file d’attente n’est pas allouée. Pour allouer une file d’attente, un pilote qui sur-mente envoie une requête OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE .

Allocated
L’état Alloué est l’état initial d’une file d’attente. Lorsqu’une file d’attente est à l’état Alloué, le pilote overlying définit généralement des filtres sur la file d’attente avec l’OID OID_RECEIVE_FILTER_SET_FILTER ou termine l’allocation de la file d’attente avec la requête OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE .

Ensemble
Dans l’état Définir , au moins un filtre est alloué à une file d’attente, mais le pilote qui se trouve trop n’a pas envoyé le OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID.

Exécution
Dans l’état En cours d’exécution, la file d’attente a des filtres définis, l’allocation de la file d’attente est terminée et l’adaptateur miniport indique les paquets de réception pour la file d’attente.

Pause
Dans l’état Suspendu , la carte réseau n’indique pas les données réseau reçues pour la file d’attente. Aucun filtre n’a été défini sur la file d’attente avant la requête OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE ou tous les filtres définis sur la file d’attente ont été effacés avec la demande OID OID_RECEIVE_FILTER_CLEAR_FILTER .

DMA arrêté
Dans l’état DMA Arrêté , un pilote miniport a reçu une requête OID OID_RECEIVE_FILTER_FREE_QUEUE . Lorsque le DMA est arrêté et que le pilote a émis l’indication status arrêtée par DMA (avec NDIS_STATUS_RECEIVE_QUEUE_STATE), le pilote entre dans l’état Freeing.

Libérer
Dans l’état Freeing , un pilote miniport effectue les opérations nécessaires pour arrêter les opérations d’envoi et de réception pour la file d’attente, et libère les ressources associées. Une fois toutes les indications de réception en attente terminées, la file d’attente est supprimée et la file d’attente est définie.

Dans le tableau suivant, les en-têtes sont les états de file d’attente. Les événements principaux sont répertoriés dans la première colonne. Le reste des entrées de la table spécifient l’état suivant que la file d’attente entre après qu’un événement se produit dans un état. Les entrées vides représentent des combinaisons événement/état non valides.

Événement \ État Indéfini Allocated Définissez Exécution en cours Suspendu Arrêter DMA Libérer

OID_RECEIVE_FILTER_ALLOCATE_QUEUE - méthode (set)

Allocated

OID_RECEIVE_FILTER_QUEUE_PARAMETERS - demande de méthode (requête)

Allocated

Définissez

Exécution en cours

Suspendu

OID_RECEIVE_FILTER_QUEUE_PARAMETERS - définir la demande

Allocated

Définissez

Exécution en cours

Suspendu

OID_RECEIVE_FILTER_SET_FILTER - demande de méthode (set)

Définissez

Définissez

Exécution en cours

Exécution en cours

OID_RECEIVE_FILTER_CLEAR_FILTER - définir la demande (dernier filtre)

Allocated

Suspendu

OID_RECEIVE_FILTER_CLEAR_FILTER - définir la demande (pas le dernier filtre)

Définissez

Exécution en cours

OID_RECEIVE_FILTER_ENUM_FILTERS - méthode (requête)

Allocated

Définissez

Exécution en cours

Suspendu

OID_RECEIVE_FILTER_PARAMETERS - requête de méthode (requête)

Définissez

Exécution en cours

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - demande de méthode (set)

Suspendu

Exécution en cours

Paquet de réception

Exécution en cours

OID_RECEIVE_FILTER_FREE_QUEUE demande de définition

Arrêter DMA

Arrêter DMA

DMA est arrêté et NDIS_STATUS_RECEIVE_QUEUE_STATE status’indication a été envoyée (Remarque : DMA a probablement déjà été arrêté à l’état Alloué ou Suspendu)

Libérer

Toutes les indications de réception sont terminées et les ressources de file d’attente sont libérées

Indéfini

Note Les événements répertoriés dans le tableau précédent incluent certains événements secondaires qui n’entraînent pas de changement d’état. Ces événements secondaires sont inclus dans la table pour spécifier les états dans lesquels ces événements sont valides.

Les événements de file d’attente principaux sont définis comme suit :

OID_RECEIVE_FILTER_ALLOCATE_QUEUE - demande de méthode (set)
Un pilote qui se superpose a alloué une file d’attente. Pour plus d’informations sur l’allocation de files d’attente, consultez Allocation et libération de files d’attente de machines virtuelles.

OID_RECEIVE_FILTER_SET_FILTER - demande de méthode (set)
Un pilote qui se superpose définit un filtre sur une file d’attente. Si le pilote qui se superpose n’a pas envoyé le OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID, la file d’attente est à l’état Définir. Sinon, la file d’attente est à l’état En cours d’exécution. Pour plus d’informations sur la définition de filtres sur les files d’attente, consultez Définition et suppression des filtres VMQ.

OID_RECEIVE_FILTER_CLEAR_FILTER - définir la demande
Un pilote qui se superposait a effacé un filtre sur une file d’attente. Si le dernier filtre a été effacé sur une file d’attente en cours d’exécution, la DMA peut être arrêtée ; les indications de réception sont arrêtées et la file d’attente doit être effacée des données reçues, le cas échéant. Pour plus d’informations sur l’effacement des filtres sur les files d’attente, consultez Définition et suppression des filtres VMQ.

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - demande de méthode (set)
Un pilote en sur-position a terminé l’allocation de file d’attente. Si des filtres sont définis sur la file d’attente, celle-ci est à l’état En cours d’exécution et les indications de réception peuvent démarrer. Pour plus d’informations sur la fin de l’allocation de file d’attente, consultez Allocation et libération des files d’attente de machines virtuelles.

Paquet de réception
Un pilote miniport peut uniquement indiquer les paquets de réception d’une file d’attente à l’état En cours d’exécution. Pour plus d’informations sur l’indication des données reçues pour les files d’attente, consultez Opérations d’envoi et de réception vmQ.

OID_RECEIVE_FILTER_FREE_QUEUE définir la demande.
Un pilote sur-ment a libéré une file d’attente. Le pilote émet l’indication DMA-stop status (avec NDIS_STATUS_RECEIVE_QUEUE_STATE), le pilote passe à l’état Freeing. Lorsque toutes les indications de réception en attente sont terminées et que les ressources de file d’attente sont libérées, la file d’attente n’est pas définie.