NDIS_RECEIVE_THROTTLE_PARAMETERS-Struktur (ndis.h)

Die NDIS_RECEIVE_THROTTLE_PARAMETERS-Struktur gibt die maximale Anzahl von NET_BUFFER_LIST Strukturen an, die ein Miniporttreiber in einem verzögerten Prozeduraufruf (DPC) angeben soll.

Syntax

typedef struct _NDIS_RECEIVE_THROTTLE_PARAMETERS {
  ULONG MaxNblsToIndicate;
  ULONG MoreNblsPending : 1;
} NDIS_RECEIVE_THROTTLE_PARAMETERS, *PNDIS_RECEIVE_THROTTLE_PARAMETERS;

Member

MaxNblsToIndicate

Die maximale Anzahl von NET_BUFFER_LIST Strukturen, die ein Miniporttreiber in eine Empfangsanzeige einschließen sollte. Wenn dieser Wert NDIS_INDICATE_ALL_NBLS ist, kann der Miniport alle NET_BUFFER_LIST Strukturen angeben, über die er verfügt.

MoreNblsPending

Ein Wert, der bei TRUE angibt, dass der Miniporttreiber über NET_BUFFER_LIST Strukturen verfügt, die ausstehen, nachdem er die maximale Anzahl oder Strukturen verarbeitet hat, die NDIS im MaxNblsToIndicate-Element angefordert hat .

Hinweis Wenn NDIS den MaxNblsToIndicate-Member auf NDIS_INDICATE_ALL_NBLS festgelegt hat, sollte der Miniporttreiber MoreNblsPending auf FALSE festlegen, bevor er vom DPC zurückgibt.
 

Hinweise

Die ReceiveThrottleParameters-Parameter des MiniportInterruptDPC und des MiniportMessageInterruptDPC DPC-Handlerfunktionen verweisen auf eine NDIS_RECEIVE_THROTTLE_PARAMETERS-Struktur. Diese Struktur gibt die Parameter von Receive Side Throttle (RST) in NDIS 6.20 und höher an.

Beim Einstieg in den DPC-Handler gibt der MaxNblsToIndicate-Member der NDIS_RECEIVE_THROTTLE_PARAMETERS-Struktur die maximale Anzahl von NET_BUFFER_LIST Strukturen an, die der Miniporttreiber im DPC angeben soll. Wenn dieser Wert NDIS_INDICATE_ALL_NBLS ist, kann der Miniporttreiber alle NET_BUFFER_LIST Strukturen in seinen Warteschlangen angeben.

Nachdem der Miniporttreiber die angegebene maximale Anzahl von NET_BUFFER_LIST Strukturen verarbeitet hat, enthält der Miniporttreiber möglicherweise mehr Pakete in seinen Empfangswarteschlangen. In diesem Fall sollte der Miniporttreiber das MoreNblsPending-Element auf TRUE festlegen und Interrupts nicht erneut aktivieren, bevor er vom DPC zurückgegeben wird. Dies gilt sowohl für zeilenbasierte als auch für Nachrichtenvoreingenommene Interrupts.

Der Miniporttreiber sollte diese Richtlinien befolgen, wenn das MaxNblsToIndicate-Element auf NDIS_INDICATE_ALL_NBLS festgelegt ist:

  • Der Wert NDIS_INDICATE_ALL_NBLS ermöglicht es dem Miniporttreiber, die Anzahl der NET_BUFFER_LIST Strukturen zu bestimmen, die er in einem DPC-Aufruf angibt. Dies bietet dem Miniporttreiber die folgenden Optionen:
    • Der Miniporttreiber kann alle ausstehenden NET_BUFFER_LIST-Strukturen aus seinen Empfangswarteschlangen angeben.
    • Der Miniporttreiber kann die Anzahl der NET_BUFFER_LIST Strukturen begrenzen, die er basierend auf seiner Heuristik angibt, um zu vermeiden, dass ein DPC-Aufruf übermäßig viel Zeit aufwendet.

      Insbesondere sollte der Treiber seine Heuristik verwenden, um ein DPC-Timeout zu vermeiden. Dies ist die maximale Zeit, die der Treiber in seinem DPC verbringen kann. Wenn das Timeoutintervall abläuft, tritt eine Fehlerüberprüfung auf dem System auf. Ab Windows 7 beträgt das DPC-Timeout 10 Sekunden.

  • Der Miniporttreiber sollte MoreNblsPending auf FALSE festlegen, bevor er vom DPC zurückgegeben wird. Der Treiber sollte dies unabhängig davon tun, ob er ausstehende NET_BUFFER_LIST Strukturen in seinen Empfangswarteschlangen hat, die nicht angegeben wurden.
Wenn der Miniporttreiber zeilenbasierte Interrupts oder eine einzelne MSI-Nachricht verwendet, sollte er die Interruptverarbeitung für alle Interruptquellen durchführen, über die er verfügt. Wenn pakete in der Empfangswarteschlange vorhanden sind, sollte dies höchstens maxNblsToIndicate NET_BUFFER_LIST Strukturen an NDIS mit dem NdisMIndicateReceiveNetBufferLists-Funktion .

Wenn der Miniporttreiber mehrere MSI-Nachrichten verwendet, um verschiedene Interruptquellen zu unterscheiden, sollte er das ReceiveThrottleParameters-Element für MSI-Nachrichten ignorieren, die nicht Empfangsanzeigen zugeordnet sind. Beim Empfangen von Interruptnachrichten sollte der Miniporttreiber höchstens MaxNblsToIndicate NET_BUFFER_LIST-Strukturen angeben.

Hinweis Wenn der Miniporttreiber MoreNblsPending festlegt, ruft NDIS den DPC erneut auf. Die Zeitspanne, die vor dem nächsten DPC-Aufruf verstreicht, ist jedoch nicht definiert. Außerdem ist die Zeitspanne zwischen der Rückgabe des anfänglichen Interruptdienstroutings (ISR) und dem DPC nicht definiert. Nachdem der Miniporttreiber MoreNblsPending festgelegt hat, sollte er den nächsten DPC verarbeiten, während er den ersten DPC verarbeitet hat.
 

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.20 und höher.
Kopfzeile ndis.h (include Ndis.h)

Weitere Informationen

MiniportInterruptDPC

MiniportMessageInterruptDPC

NET_BUFFER_LIST

NdisMIndicateReceiveNetBufferLists