Freigeben über


NDIS_PD_QUERY_QUEUE_DEPTH Rückruffunktion (ndis.h)

Die PacketDirect(PD)-Plattform ruft die PDQueryQueueDepth- Funktion eines PDQueryQueueDepth-Treibers auf, um die Anzahl der unverarbeiteten PD_BUFFER Strukturen zurückzugeben, die in die Queuegepostet werden.

Note You must declare the function by using the NDIS_PD_QUERY_QUEUE_DEPTH type. 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 Übertragungs- oder Empfangswarteschlange.

[out] Depth

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

Rückgabewert

Diese Rückruffunktion gibt keinen Wert zurück.

Bemerkungen

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

beispiele für

Um eine PDQueryQueueDepth--Funktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der Funktion identifiziert, die Sie definieren. Windows stellt eine Reihe von Funktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Funktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine PDQueryQueueDepth--Funktion zu definieren, die den Namen "MyPDQueryQueueDepth" hat, 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 wird in der Headerdatei "Ntddndis.h" definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp NDIS_PD_QUERY_QUEUE_DEPTH in der Headerdatei angewendet werden, verwendet 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_annotationsfinden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 10
mindestens unterstützte Server- Windows Server 2016
Zielplattform- Fenster
Header- ndis.h
IRQL- <= DISPATCH_LEVEL