Partager via


É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. Afin de allouer une file d’attente, un pilote superposé envoie une requête OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE.

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

Définir
Dans l’état Set, une file d’attente a au moins un filtre alloué, mais le pilote superposé n’a pas envoyé le OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID.

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

Suspendu
Dans l’état Suspendu , l’adaptateur réseau ne transmet pas les données réseau reçues pour la file. 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 qui ont été définis dans la file d’attente ont été effacés avec la requête 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 de type OID_RECEIVE_FILTER_FREE_QUEUE. Lorsque la DMA est arrêtée et que le pilote a émis l’indication d’état d’arrêt DMA (avec NDIS_STATUS_RECEIVE_QUEUE_STATE), le pilote entre dans l’état Freeing.

Libération
Dans l’état Freeing , un pilote miniport termine les opérations nécessaires pour arrêter les opérations d’envoi et de réception de la file d’attente et libère les ressources associées. Une fois que toutes les indications de réception en attente sont terminées, la file d’attente est supprimée et devient indé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écifie l'état suivant dans lequel la file d'attente entre après qu'un événement se soit produit dans un état. Les entrées vides représentent des combinaisons d’événements/d’état non valides.

Événement \ État Indéfini Affecté Définissez Course à pied Suspendu(e) Arrêter DMA Libération

OID_RECEIVE_FILTER_ALLOCATE_QUEUE - méthode (set)

Affecté

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

Affecté

Définissez

Course à pied

Suspendu(e)

OID_RECEIVE_FILTER_QUEUE_PARAMETERS - configurer la requête

Affecté

Définissez

Course à pied

Suspendu(e)

OID_RECEIVE_FILTER_SET_FILTER - requête de méthode (définition)

Définissez

Définissez

Course à pied

Course à pied

OID_RECEIVE_FILTER_CLEAR_FILTER - définir la demande (dernier filtre)

Affecté

Suspendu(e)

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

Définissez

Course à pied

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

Affecté

Définissez

Course à pied

Suspendu(e)

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

Définissez

Course à pied

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - requête de méthode (set)

Suspendu(e)

Course à pied

Recevoir un paquet

Course à pied

OID_RECEIVE_FILTER_FREE_QUEUE définir la demande

Arrêter le DMA

Arrêter DMA

DMA est arrêté et l'indication de l'état NDIS_STATUS_RECEIVE_QUEUE_STATE a été envoyée (Remarque : le DMA était probablement déjà arrêté dans l'état alloué ou l'état suspendu)

Libération

Toutes les indications de réception sont terminées et les ressources de la 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 modification 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 - requête de méthode (définir)
Un pilote surlysant a alloué une file d’attente. Pour plus d’informations sur l’allocation de files d’attente, consultez Allocation et libération des files d’attente de machines virtuelles.

OID_RECEIVE_FILTER_SET_FILTER - requête de méthode (set)
Un pilote superposé a défini un filtre sur une file d’attente. Si le pilote supérieur n’a pas envoyé le OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID, la file d’attente est dans l'état défini. Sinon, la file d’attente est dans l’état Actif. Pour plus d’informations sur la définition de filtres sur les files d’attente, consultez Définition et effacement des filtres VMQ.

OID_RECEIVE_FILTER_CLEAR_FILTER - définir la requête
Un pilote superposé a effacé un filtre sur une file. Si le dernier filtre a été effacé sur une file d’attente en cours d’exécution, le DMA peut être stoppé ; les notifications de réception sont interrompues et la file d’attente doit être vidée des données reçues, si applicable. Pour plus d’informations sur l’effacement des filtres sur les files d’attente, consultez Définition et effacement des filtres VMQ.

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - requête de méthode (définition)
Un pilote supérieur a terminé la répartition de la file d'attente. S’il existe des filtres définis dans la file d’attente, elle est dans l’état en cours d’exécution et les instructions de réception peuvent démarrer. Pour plus d’informations sur la fin de l’allocation de files d’attente, consultez Allocation et libération des files d’attente de machines virtuelles.

Paquet de réception
Un pilote miniport ne peut indiquer que les paquets de réception d'une file d'attente qui est active. Pour plus d’informations sur l’indication des données reçues pour les files d’attente, consultez VmQ Send and Receive Operations.

OID_RECEIVE_FILTER_FREE_QUEUE définir la requête.
Un pilote superposé a libéré une file d'attente. Le pilote émet l’indication d’état DMA arrêté (avec NDIS_STATUS_RECEIVE_QUEUE_STATE), le pilote entre dans l’état de libération. 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.