Freigeben über


NDIS_PD_QUERY_QUEUE_DEPTH Rückruffunktion (ndis.h)

Die PacketDirect-Plattform (PD) ruft die PD-fähige Funktion PDQueryQueueDepth eines Miniporttreibers auf, um die Anzahl der unverarbeiteten PD_BUFFER Strukturen zurückzugeben, die an die Warteschlange gesendet werden.

Hinweis Sie müssen die Funktion mit dem NDIS_PD_QUERY_QUEUE_DEPTH-Typ deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt Beispiele.

 

Syntax

NDIS_PD_QUERY_QUEUE_DEPTH NdisPdQueryQueueDepth;

VOID() NdisPdQueryQueueDepth(
  [in]  const NDIS_PD_QUEUE *Queue,
  [out] ULONG64 *Depth
)
{...}

Parameter

[in] Queue

Ein Zeiger auf eine Sende- oder Empfangswarteschlange.

[out] Depth

In einer Empfangswarteschlange ist dies die Anzahl PD_BUFFER Strukturen, die zum Platzieren eingehender Pakete in verfügbar sind. Wenn beispielsweise 10 Puffer gepostet wurden und 3 der 10 vom Anbieter bereits abgerufen wurden, um eingehende Pakete in zu platzieren, sollte dieser Wert 7 sein. In einer Übertragungswarteschlange ist dies die Anzahl PD_BUFFER Strukturen, die der Anbieter noch nicht aus der Warteschlange für die Übertragung abgerufen hat.

Rückgabewert

Diese Rückruffunktion gibt keinen Wert zurück.

Hinweise

Hinweis Für IHV-Partner: Die Möglichkeit, die Warteschlangentiefe zu überwachen, ist sehr wichtig für Kunden, um auf den Stauaufbau zuzugreifen und vorsichtshalber Maßnahmen zu ergreifen. Eine zunehmende Warteschlangentiefe für eine Übertragungswarteschlange ist ein Zeichen für eine zunehmende Überlastung des ausgehenden Links. Eine abnehmende Warteschlangentiefe für eine RX-Warteschlange ist ein Zeichen dafür, dass der Client eingehende Pakete nicht schnell genug über den eingehenden Link verarbeiten kann. Clients müssen möglicherweise die Warteschlangentiefe überwachen, die häufig mit status (z. B. das Abrufen der Warteschlangentiefe für jeden Post und Vorgang, daher dürfen die Kosten (in CPU-Zyklen) für die Abfrage der Warteschlangentiefe im Vergleich zu den Kosten eines einzelnen PDPostAndDrainBufferList-Aufrufs nicht spürbar sein.
 

Beispiele

Um eine PDQueryQueueDepth-Funktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der zu definierenden Funktion identifiziert. Windows stellt eine Reihe von Funktionstypen für Treiber bereit. Das Deklarieren einer Funktion mithilfe der Funktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine PDQueryQueueDepth-Funktion mit dem Namen "MyPDQueryQueueDepth" zu definieren, verwenden Sie den NDIS_PD_QUERY_QUEUE_DEPTH-Typ , wie in diesem Codebeispiel gezeigt:

NDIS_PD_QUERY_QUEUE_DEPTH MyPDQueryQueueDepth;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MyPDQueryQueueDepth(
    CONST NDIS_PD_QUEUE*  Queue,
    ULONG64*  Depth
    )
  {...}

Der NDIS_PD_QUERY_QUEUE_DEPTH Funktionstyp ist in der Headerdatei "Ntddndis.h" definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzu. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den NDIS_PD_QUERY_QUEUE_DEPTH Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für NDIS-Treiber.

Informationen zu Use_decl_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10
Unterstützte Mindestversion (Server) Windows Server 2016
Zielplattform Windows
Kopfzeile ndis.h
IRQL <= DISPATCH_LEVEL