MINIPORT_INTERRUPT_DPC Rückruffunktion (ndis.h)
Ein Miniporttreiber muss eine MiniportInterruptDPC-Funktion bereitstellen, wenn der Treiber die NdisMRegisterInterruptEx-Funktion aufruft , um einen Interrupt zu registrieren.
Syntax
MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;
void MiniportInterruptDpc(
[in] NDIS_HANDLE MiniportInterruptContext,
[in] PVOID MiniportDpcContext,
[in] PVOID ReceiveThrottleParameters,
[in] PVOID NdisReserved2
)
{...}
Parameter
[in] MiniportInterruptContext
Ein Handle für einen Block von Interruptkontextinformationen. Der Miniporttreiber hat dieses Handle im MiniportInterruptContext-Parameter bereitgestellt, den der Miniporttreiber an den übergeben hat. NdisMRegisterInterruptEx-Funktion .
[in] MiniportDpcContext
Ein Zeiger auf einen Kontextbereich, den der Miniporttreiber beim Aufrufen der Funktion NdisMQueueDpcEx oder NdisMQueueDpc bereitgestellt hat . Wenn NDIS MiniportInterruptDPC aufgerufen hat , weil der Miniporttreiber eine Bitmaske im TargetProcessors-Parameter der MiniportInterrupt-Funktion zurückgegeben hat , ist MiniportDpcContextNULL.
[in] ReceiveThrottleParameters
Ein Zeiger auf eine NDIS_RECEIVE_THROTTLE_PARAMETERS Struktur. Diese Struktur gibt die maximale Anzahl von NET_BUFFER_LIST Strukturen an, die ein Miniporttreiber in einem DPC angeben soll.
[in] NdisReserved2
Reserviert für NDIS.
Rückgabewert
Keine
Bemerkungen
Miniport-Treiber, die einen Interrupt bei der NdisMRegisterInterruptEx-Funktion registrieren, müssen eine MiniportInterruptDPC-Funktion bereitstellen.
NDIS ruft MiniportInterruptDPC auf, um die verzögerte Verarbeitung eines Interrupts abzuschließen. Der Miniporttreiber kann die Funktion NdisMQueueDpcEx oder NdisMQueueDpc aufrufen, um zusätzliche verzögerte Prozeduraufrufe (DpCs) für andere Prozessoren anzufordern.
Miniporttreiber bestimmen die Quelle jedes Interrupts und ergreifen entsprechende Maßnahmen. Wenn beispielsweise ein Interrupt den Abschluss eines Übertragungsvorgangs angibt, schließt der Miniporttreiber eine ausstehende Sendeanforderung ab. Wenn die Quelle des Interrupts eine Änderung des Linkzustands ist, gibt der Miniporttreiber den neuen Link status zu NDIS an. Wenn ausstehende Empfangspakete vorhanden sind, gibt der Miniporttreiber die Pakete an NDIS an.
Ein Miniporttreiber, der die empfangsseitige Skalierung (RSS) unterstützt und das Feature aktiviert hat, untersucht seine Empfangswarteschlangen in MiniportInterruptDPC. Die NIC könnte empfangene Pakete bereits in separate Warteschlangen basierend auf Hashwerten in die Warteschlange gestellt haben, wenn die NIC solche Funktionen bereitstellt. Andernfalls kann der Miniporttreiber die Pakete in separate Warteschlangen in MiniportInterruptDPC sortieren.
MiniportInterruptDPC ruft die auf NdisMIndicateReceiveNetBufferLists-Funktion , um Pakete auf dem aktuellen Prozessor anzugeben. MiniportInterruptDPC kann Verarbeitungen identifizieren, die für andere CPUs erforderlich sind, und NDIS anfordern, DPCs auf CPUs zu planen, bei denen kein DPC aussteht.
Wenn der aktuelle DPC auf derselben CPU wie die MiniportInterrupt-Funktion ausgeführt wird, sollte der Miniporttreiber alle Pakete angeben, die nicht einer CPU zugeordnet werden konnten. Wenn es sich bei diesem DPC um den letzten geplanten DPC handelt und keine zusätzlichen DPCs angefordert werden, sollte MiniportInterruptDPC die Interrupts auf der NIC erneut aktivieren, bevor er zurückgegeben wird.
Interrupts sind in der Regel bereits auf der NIC in der MiniportInterrupt-Funktion deaktiviert, bevor NDIS MiniportInterruptDPC aufruft. Bevor die Steuerung zurückgegeben wird, kann MiniportInterruptDPC Interrupts wieder aktivieren. Wenn der Miniporttreiber zusätzliche DPCs in die Warteschlange gestellt hat, während Interrupts deaktiviert wurden, sollte der Treiber die Interrupts aktivieren, bevor der letzte DPC zurückgegeben wird.
Miniporttreiber sollten die Anzahl der Empfangspuffer begrenzen, die sie angeben, während sie einen Interrupt-DPC-Batch verarbeiten, um innerhalb des erforderlichen Zeitlimits abzuschließen. Ein Interrupt-DPC-Batch ist die Sammlung aller DPCs, die nach der ISR und vor dem erneuten Aktivieren der Interrupts ausgeführt werden.
Ein Miniporttreiber kann die NdisMDeregisterInterruptEx-Funktion aus der MiniportInitializeEx - oder MiniportHaltEx-Funktion , um Ressourcen freizugeben, die sie mit NdisMRegisterInterruptEx zugeordnet hat. Nachdem NdisMDeregisterInterruptEx zurückgegeben wurde , ruft NDIS die MiniportInterrupt - oder MiniportInterruptDPC-Funktion eines Miniporttreibers nicht auf.
NDIS ruft MiniportInterruptDPC unter IRQL = DISPATCH_LEVEL auf.
Beispiele
Um eine MiniportInterruptDPC-Funktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der funktion identifiziert, die Sie definieren. Windows bietet eine Reihe von Funktionstypen für Treiber. 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 Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.Um beispielsweise eine MiniportInterruptDPC-Funktion mit dem Namen "MyInterruptDPC" zu definieren, verwenden Sie den typ MINIPORT_INTERRUPT_DPC , wie in diesem Codebeispiel gezeigt:
MINIPORT_INTERRUPT_DPC MyInterruptDPC;
Implementieren Sie dann Ihre Funktion wie folgt:
_Use_decl_annotations_
VOID
MyInterruptDPC(
NDIS_HANDLE MiniportInterruptContext,
PVOID MiniportDpcContext,
PVOID ReceiveThrottleParameters,
PVOID NdisReserved2
)
{...}
Der MINIPORT_INTERRUPT_DPC Funktionstyp ist in der Headerdatei Ndis.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, müssen Sie der Funktionsdefinition die anmerkung Use_decl_annotations hinzufügen. Die Use_decl_annotations-Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den funktionstyp MINIPORT_INTERRUPT_DPC 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) | Unterstützt in NDIS 6.0 und höher. |
Zielplattform | Windows |
Kopfzeile | ndis.h (include Ndis.h) |
IRQL | DISPATCH_LEVEL |