Partager via


OID_RECEIVE_FILTER_FREE_QUEUE

Les pilotes de protocole NDIS émettent des requêtes d’identificateur d’objet (OID) définies de OID_RECEIVE_FILTER_FREE_QUEUE pour libérer une file d’attente de réception.

Le membre InformationBuffer de la structure NDIS_OID_REQUEST contient un pointeur vers une structure de NDIS_RECEIVE_QUEUE_FREE_PARAMETERS avec un identificateur de file d’attente de type NDIS_RECEIVE_QUEUE_ID.

Notes

La demande d’ensemble OID de OID_RECEIVE_FILTER_FREE_QUEUE est facultative pour les pilotes NDIS 6.20 et versions ultérieures de miniport. Il est obligatoire pour les pilotes miniport qui prennent en charge l’interface de file d’attente des machines virtuelles.

Une fois qu’un pilote qui émet un problème de OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID pour allouer une file d’attente de réception, il émet le OID_RECEIVE_FILTER_FREE_QUEUE OID pour libérer la file d’attente de réception.

Quand NDIS demande un pilote miniport pour libérer une file d’attente de réception VMQ, il suit les étapes suivantes :

  1. La carte réseau arrête le transfert DMA de données pour recevoir les mémoires tampons associées à la file d’attente de réception, après quoi la file d’attente doit entrer dans l’état DMA Arrêté. La carte réseau a probablement arrêté l’activité DMA lorsqu’elle a reçu la demande OID OID_RECEIVE_FILTER_CLEAR_FILTER pour effacer le dernier filtre défini sur la file d’attente de réception.

  2. Le pilote miniport génère une indication status NDIS_STATUS_RECEIVE_QUEUE_STATE avec le membre QueueState de la structure NDIS_RECEIVE_QUEUE_STATE défini sur NdisReceiveQueueOperationalStateDmaStopped pour notifier NDIS que le transfert DMA a été arrêté.

  3. Le pilote miniport attend que tous les paquets de réception indiqués soient retournés au pilote miniport.

  4. Le pilote miniport libère toute la mémoire partagée qu’il a allouée aux mémoires tampons de réception de la carte réseau associées à la file d’attente en appelant NdisFreeSharedMemory.

  5. Le pilote miniport termine la requête OID OID_RECEIVE_FILTER_FREE_QUEUE pour libérer la file d’attente de réception.

Les pilotes miniport appellent la fonction NdisFreeSharedMemory pour libérer de la mémoire partagée pour une file d’attente. Si le pilote miniport a alloué la mémoire partagée pour une file d’attente non par défaut, le pilote libère la mémoire partagée dans le contexte de l’OID OID_RECEIVE_FILTER_FREE_QUEUE pendant qu’il libère la file d’attente. Les pilotes Miniport libèrent la mémoire partagée qu’ils ont allouée pour la file d’attente par défaut dans le contexte de la fonction MiniportHaltEx .

Un pilote qui se superpose doit libérer tous les filtres qu’il a définis sur une file d’attente avant de libérer la file d’attente. En outre, un pilote trop étendu doit libérer toutes les files d’attente de réception qu’il a allouées sur une carte réseau avant d’appeler la fonction NdisCloseAdapterEx pour fermer une liaison à la carte réseau. NDIS libère toutes les files d’attente allouées sur une carte réseau avant d’appeler la fonction MiniportHaltEx du pilote miniport .

Codes d’état de retour

La fonction MiniportOidRequest du pilote miniport renvoie l’une des valeurs suivantes pour cette requête :

Terme Description

NDIS_STATUS_SUCCESS

Le pilote miniport a effectué la demande avec succès.

NDIS_STATUS_PENDING

Le pilote miniport effectue la requête de manière asynchrone. Une fois que le pilote miniport a terminé tout le traitement, il doit réussir la demande en appelant la fonction NdisMOidRequestComplete , en passant NDIS_STATUS_SUCCESS pour le paramètre Status .

NDIS_STATUS_NOT_ACCEPTED

Le pilote miniport est réinitialisé.

NDIS_STATUS_REQUEST_ABORTED

Le pilote miniport a cessé de traiter la demande. Par exemple, NDIS a appelé la fonction MiniportResetEx .

NDIS retourne l’un des codes status suivants pour cette demande :

Code d’état Description

NDIS_STATUS_SUCCESS

La file d’attente demandée a été libérée avec succès.

NDIS_STATUS_PENDING

La demande est en attente d’achèvement. NDIS transmet le code status final et les résultats au gestionnaire de saisie semi-automatique de la requête OID pour l’appelant une fois la demande terminée.

NDIS_STATUS_INVALID_PARAMETER

L’identificateur de file d’attente n’est pas valide.

NDIS_STATUS_INVALID_LENGTH

La mémoire tampon d’informations est trop courte. NDIS définit les DONNÉES. METHOD_INFORMATION. BytesNeeded member dans la structure NDIS_OID_REQUEST à la taille de mémoire tampon minimale requise.

Spécifications

Version

Pris en charge dans NDIS 6.20 et versions ultérieures.

En-tête

Ntddndis.h (inclure Ndis.h)

Voir aussi

MiniportHaltEx

NDIS_OID_REQUEST

NDIS_RECEIVE_QUEUE_FREE_PARAMETERS

NDIS_STATUS_RECEIVE_QUEUE_STATE

NdisCloseAdapterEx

NdisFreeSharedMemory

OID_RECEIVE_FILTER_ALLOCATE_QUEUE