Freigeben über


Warteschlangenzustände und -vorgänge

Für jede Warteschlange muss ein Netzwerkadapter die folgenden Betriebszustände unterstützen:

Undefined
Die Warteschlange ist nicht zugeordnet. Um eine Warteschlange zuzuordnen, sendet ein übersteigender Treiber eine OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID-Anforderung.

Zugeordnet
Der Status Zugeordnet ist der Anfangszustand für eine Warteschlange. Wenn sich eine Warteschlange im Status Zugeordnet befindet, legt der überlastende Treiber normalerweise Filter für die Warteschlange mit der OID_RECEIVE_FILTER_SET_FILTER OID fest oder schließt die Warteschlangenzuordnung mit der OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID-Anforderung ab.

Set
Im Status Set hat eine Warteschlange mindestens einen Filter zugewiesen, aber der überlastende Treiber hat die OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID nicht gesendet.

Wird ausgeführt
Im Status "Ausführen" hat die Warteschlange Filter festgelegt, die Warteschlangenzuordnung ist abgeschlossen, und der Miniportadapter gibt Empfangspakete für die Warteschlange an.

Angehalten
Im Zustand Angehalten gibt der Netzwerkadapter keine empfangenen Netzwerkdaten für die Warteschlange an. Entweder waren vor der OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID-Anforderung keine Filter für die Warteschlange festgelegt, oder alle Filter, die für die Warteschlange festgelegt wurden, wurden mit der OID_RECEIVE_FILTER_CLEAR_FILTER OID-Anforderung gelöscht.

DMA beendet
Im DMA-Status Beendet hat ein Miniporttreiber eine OID_RECEIVE_FILTER_FREE_QUEUE OID-Anforderung empfangen. Wenn der DMA beendet wird und der Treiber die DMA-stopp-status-Anzeige (mit NDIS_STATUS_RECEIVE_QUEUE_STATE) ausgegeben hat, wechselt der Fahrer in den Freeing-Zustand.

Befreien
Im Status Freeing schließt ein Miniporttreiber die Vorgänge ab, die zum Beenden von Sende- und Empfangsvorgängen für die Warteschlange erforderlich sind, und gibt die zugeordneten Ressourcen frei. Nachdem alle ausstehenden Empfangsanzeigen abgeschlossen sind, wird die Warteschlange gelöscht und die Warteschlange ist nicht definiert.

In der folgenden Tabelle sind die Überschriften die Warteschlangenzustände. Wichtige Ereignisse werden in der ersten Spalte aufgeführt. Die restlichen Einträge in der Tabelle geben den nächsten Zustand an, den die Warteschlange nach einem Ereignis in einem Zustand eingibt. Die leeren Einträge stellen ungültige Ereignis-Zustandskombinationen dar.

Ereignis \ Zustand Nicht definiert Zugeordnet Set Wird ausgeführt Angehalten Beenden von DMA Befreien

OID_RECEIVE_FILTER_ALLOCATE_QUEUE - Methode (set)

Zugeordnet

OID_RECEIVE_FILTER_QUEUE_PARAMETERS - Methodenanforderung (Abfrageanforderung)

Zugeordnet

Set

Wird ausgeführt

Angehalten

OID_RECEIVE_FILTER_QUEUE_PARAMETERS – Anforderung festlegen

Zugeordnet

Set

Wird ausgeführt

Angehalten

OID_RECEIVE_FILTER_SET_FILTER - Methode (Set)-Anforderung

Set

Set

Wird ausgeführt

Wird ausgeführt

OID_RECEIVE_FILTER_CLEAR_FILTER – Anforderung festlegen (letzter Filter)

Zugeordnet

Angehalten

OID_RECEIVE_FILTER_CLEAR_FILTER : Festlegen der Anforderung (nicht der letzte Filter)

Set

Wird ausgeführt

OID_RECEIVE_FILTER_ENUM_FILTERS - Methode (Abfrageanforderung)

Zugeordnet

Set

Wird ausgeführt

Angehalten

OID_RECEIVE_FILTER_PARAMETERS - Methodenanforderung (Abfrageanforderung)

Set

Wird ausgeführt

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - Methode (Set)-Anforderung

Angehalten

Wird ausgeführt

Empfangspaket

Wird ausgeführt

OID_RECEIVE_FILTER_FREE_QUEUE Anforderung festlegen

Beenden von DMA

Beenden von DMA

DMA wird beendet, und NDIS_STATUS_RECEIVE_QUEUE_STATE status Anzeige gesendet wurde (Hinweis: DMA wurde wahrscheinlich bereits im Status "Zugeordnet" oder "Angehalten" beendet)

Befreien

Alle Empfangsanzeigen sind abgeschlossen, und die Warteschlangenressourcen werden freigegeben.

Nicht definiert

Hinweis Die in der vorherigen Tabelle aufgeführten Ereignisse enthalten einige sekundäre Ereignisse, die nicht zu einer Zustandsänderung führen. Diese sekundären Ereignisse werden in der Tabelle enthalten, um die Zustände anzugeben, in denen diese Ereignisse gültig sind.

Die primären Warteschlangenereignisse werden wie folgt definiert:

OID_RECEIVE_FILTER_ALLOCATE_QUEUE - Methode (Set)-Anforderung
Ein überlastender Treiber hat eine Warteschlange zugewiesen. Weitere Informationen zum Zuweisen von Warteschlangen finden Sie unter Zuweisen und Freigeben von VM-Warteschlangen.

OID_RECEIVE_FILTER_SET_FILTER - Methode (Set)-Anforderung
Ein übersteigender Treiber hat einen Filter für eine Warteschlange festgelegt. Wenn der überlastende Treiber die OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID nicht gesendet hat, befindet sich die Warteschlange im Status Set. Andernfalls befindet sich die Warteschlange im Status "Ausgeführt". Weitere Informationen zum Festlegen von Filtern für Warteschlangen finden Sie unter Festlegen und Löschen von VMQ-Filtern.

OID_RECEIVE_FILTER_CLEAR_FILTER – Anforderung festlegen
Ein überlasteter Treiber hat einen Filter für eine Warteschlange gelöscht. Wenn der letzte Filter in einer ausgeführten Warteschlange gelöscht wurde, kann der DMA beendet werden. Empfangsanzeigen werden beendet, und die Warteschlange sollte von empfangenen Daten gelöscht werden, falls vorhanden. Weitere Informationen zum Löschen von Filtern in Warteschlangen finden Sie unter Festlegen und Löschen von VMQ-Filtern.

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - Methode (Set)-Anforderung
Ein überlastender Treiber hat die Warteschlangenzuordnung abgeschlossen. Wenn Filter für die Warteschlange festgelegt sind, befindet sie sich im Status "Ausgeführt", und es können Empfangsanzeigen gestartet werden. Weitere Informationen zum Abschließen der Warteschlangenzuordnung finden Sie unter Zuweisen und Freigeben von VM-Warteschlangen.

Empfangspaket
Ein Miniporttreiber kann nur Empfangspakete für eine Warteschlange angeben, die sich im Status "Ausgeführt" befindet. Weitere Informationen zum Angeben empfangener Daten für Warteschlangen finden Sie unter VMQ-Sende- und Empfangsvorgänge.

OID_RECEIVE_FILTER_FREE_QUEUE Anforderung festlegen.
Ein übersteigender Treiber hat eine Warteschlange freigegeben. Der Treiber gibt die DMA-beendete status-Anzeige aus (mit NDIS_STATUS_RECEIVE_QUEUE_STATE), der Treiber wechselt in den Status Freeing. Wenn alle ausstehenden Empfangsanzeigen abgeschlossen sind und die Warteschlangenressourcen freigegeben werden, ist die Warteschlange nicht definiert.