Freigeben über


MINIPORT_MESSAGE_INTERRUPT_DPC Rückruffunktion (ndis.h)

Ein Miniporttreiber muss einen MiniportMessageInterruptDPC- Handler bereitstellen, wenn der Treiber den NdisMRegisterInterruptEx--Funktion aufruft, um einen Interrupt zu registrieren.

Note You must declare the function by using the MINIPORT_MESSAGE_INTERRUPT_DPC type. Weitere Informationen finden Sie im folgenden Abschnitt "Beispiele".
 

Syntax

MINIPORT_MESSAGE_INTERRUPT_DPC MiniportMessageInterruptDpc;

void MiniportMessageInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] ULONG MessageId,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
       PVOID NdisReserved2 PULONG NdisReserved1,
  [in] PULONG NdisReserved2
)
{...}

Parameter

[in] MiniportInterruptContext

Ein Handle für einen Block von Interruptkontextinformationen. Der Miniporttreiber hat diesen Handle im MiniportInterruptContext Parameter bereitgestellt, den der Miniporttreiber an den Funktion NdisMRegisterInterruptEx.

[in] MessageId

Ein Message-signaled interrupt (MSI)-Nachrichtenbezeichner. MessageId- ist ein Index für einen IO_INTERRUPT_MESSAGE_INFO_ENTRY Struktur innerhalb einer IO_INTERRUPT_MESSAGE_INFO Struktur. NDIS übergibt einen Zeiger an die zugeordnete IO_INTERRUPT_MESSAGE_INFO Struktur im MessageInfoTable Member, wenn der Treiber erfolgreich für MSI mit der NdisMRegisterInterruptEx--Funktion registriert wird.

[in] MiniportDpcContext

Ein Zeiger auf einen Kontextbereich, den der Miniporttreiber beim Aufrufen der NdisMQueueDpcEx oder NdisMQueueDpc Funktion angegeben hat. If NDIS called MiniportMessageInterruptDPC because the miniport driver returned a bitmask in the TargetProcessors parameter of the MiniportMessageInterrupt Funktion, MiniportDpcContext ist NULL.

[in] ReceiveThrottleParameters

Ein Zeiger auf einen NDIS_RECEIVE_THROTTLE_PARAMETERS Struktur gibt die maximale Anzahl von NET_BUFFER_LIST Strukturen an, die ein Miniporttreiber in einem DPC angeben soll.

Hinweis In NDIS 6.1 und früher wird dieser Parameter NdisReserved1benannt, dessen Datentyp PULONG-ist und für NDIS reserviert ist.
 

NdisReserved1

Reserviert für NDIS.

[in] NdisReserved2

Reserviert für NDIS.

Hinweis In NDIS 6.1 und früher ist der Datentyp dieses Parameters PULONG-.
 

Rückgabewert

Nichts

Bemerkungen

Miniport-Treiber, die einen meldungs signalisierten Interrupt bei der funktion NdisMRegisterInterruptEx registrieren, müssen eine MiniportMessageInterruptDPC--Funktion bereitstellen.

NDIS ruft MiniportMessageInterruptDPC- auf, um die verzögerte Verarbeitung eines Interrupts abzuschließen. Der Miniporttreiber kann den NdisMQueueDpcEx- oder NdisMQueueDpc--Funktion aufrufen, um zusätzliche verzögerte Prozeduraufrufe (DPCs) für andere Prozessoren anzufordern.

Miniporttreiber bestimmen die Quelle der einzelnen Unterbrechungen und ergreifen entsprechende Maßnahmen. Wenn beispielsweise ein Interrupt den Abschluss eines Sendevorgangs angibt, schließt der Miniporttreiber eine ausstehende Sendeanforderung ab. Wenn die Ursache des Interrupts eine Änderung des Verknüpfungszustands ist, gibt der Miniporttreiber den neuen Verknüpfungsstatus an NDIS an. Wenn es ausstehende Empfangspakete gibt, gibt der Miniporttreiber die Pakete an NDIS an.

Ein Miniporttreiber, der rss-(Side Scaling) unterstützt und das Feature aktiviert ist, überprüft seine Empfangswarteschlangen in MiniportMessageInterruptDPC. Die NIC könnte bereits empfangene Pakete für separate Warteschlangen basierend auf Hashwerten in die Warteschlange eingereiht haben, wenn die NIC solche Funktionen bereitstellt. Andernfalls kann der Miniporttreiber die Pakete in separate Warteschlangen in MiniportMessageInterruptDPC-sortieren.

MiniportMessageInterruptDPC ruft die NdisMIndicateReceiveNetBufferLists Funktion, um die Pakete auf dem aktuellen Prozessor anzugeben. MiniportMessageInterruptDPC- kann die Verarbeitung bestimmen, die für andere CPUs erforderlich ist, und NDIS anfordern, DPCs auf CPUs zu planen, wenn ein DPC nicht ausstehender Ist.

Wenn der aktuelle DPC auf derselben CPU ausgeführt wird wie die MiniportMessageInterrupt--Funktion sollte der Miniporttreiber alle Pakete angeben, die keiner CPU zugeordnet werden konnten. Wenn dieser DPC der letzte geplante DPC ist und es keine zusätzlichen DPCs anfordert, MiniportMessageInterruptDPC sollte die Unterbrechungen auf der NIC für die angegebene Nachricht erneut aktivieren, bevor sie zurückgegeben wird.

Bevor NDIS MiniportMessageInterruptDPC-aufruft, wurden Unterbrechungen für die angegebene Nachricht in der NIC in der Regel in der NIC deaktiviert. MiniportMessageInterrupt Funktion. Bevor das Steuerelement zurückgegeben wird, kann MiniportMessageInterruptDPC- Unterbrechungen erneut ausführen. Wenn der Miniporttreiber zusätzliche DPCs in die Warteschlange gestellt hat, während Unterbrechungen deaktiviert wurden, sollte der Treiber die Unterbrechungen aktivieren, nachdem der letzte DPC ausgeführt wurde.

Hinweis Um eine bessere Leistung zu erzielen, sollten Miniporttreiber nur Unterbrechungen für bestimmte Nachrichten deaktivieren. Sie sollten nicht alle Nachrichtensignalunterbrechungen deaktivieren.
 
Miniporttreiber sollten die Anzahl der Empfangenpuffer beschränken, die sie angeben, während sie einen Interrupt-DPC-Batch innerhalb des erforderlichen Zeitlimits verarbeiten. Ein Interrupt-DPC-Batch ist die Sammlung aller DPCs, die nach dem ISR ausgeführt werden, und bevor die Unterbrechungen erneut aktiviert werden.

Ein Miniporttreiber kann NdisMDeregisterInterruptEx- aus seinem MiniportInitializeEx- oder MiniportHaltEx-funktion aufrufen, um Ressourcen freizugeben, die ihm mit NdisMRegisterInterruptExzugeordnet sind. Nachdem NdisMDeregisterInterruptEx- zurückgegeben wurde, ruft NDIS die MiniportMessageInterrupt oder MiniportMessageInterruptDPC Funktion nicht auf.

NDIS ruft MiniportMessageInterruptDPC- bei IRQL = DISPATCH_LEVEL auf.

beispiele für

Um eine MiniportMessageInterruptDPC--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 MiniportMessageInterruptDPC--Funktion zu definieren, die den Namen "MyMessageInterruptDPC" hat, verwenden Sie den MINIPORT_MESSAGE_INTERRUPT_DPC Typ, wie in diesem Codebeispiel gezeigt:

MINIPORT_MESSAGE_INTERRUPT_DPC MyMessageInterruptDPC;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MyMessageInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

Der MINIPORT_MESSAGE_INTERRUPT_DPC Funktionstyp wird in der Ndis.h-Headerdatei 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 MINIPORT_MESSAGE_INTERRUPT_DPC 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- Unterstützt in NDIS 6.0 und höher.
Zielplattform- Fenster
Header- ndis.h (include Ndis.h)
IRQL- DISPATCH_LEVEL

Siehe auch

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx-

MiniportMessageInterrupt-

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

RSS- (Receive Side Scaling)