MINIPORT_MESSAGE_INTERRUPT_DPC Rückruffunktion (ndis.h)
Ein Miniporttreiber muss einen MiniportMessageInterruptDPC-Handler bereitstellen, wenn der Treiber die NdisMRegisterInterruptEx-Funktion aufruft , um einen Interrupt zu registrieren.
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 dieses Handle im MiniportInterruptContext-Parameter bereitgestellt, den der Miniporttreiber an den übergeben hat. NdisMRegisterInterruptEx-Funktion .
[in] MessageId
Ein MSI-Nachrichtenbezeichner (Message-Signaled Interrupt). MessageId ist ein Index für eine IO_INTERRUPT_MESSAGE_INFO_ENTRY-Struktur in einem IO_INTERRUPT_MESSAGE_INFO Struktur. NDIS übergibt einen Zeiger auf 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 Funktion NdisMQueueDpcEx oder NdisMQueueDpc bereitgestellt hat . Wenn NDIS MiniportMessageInterruptDPC aufgerufen hat , weil der Miniporttreiber eine Bitmaske im TargetProcessors-Parameter des zurückgegeben hat MiniportMessageInterrupt-Funktion , dann MiniportDpcContext ist NULL.
[in] ReceiveThrottleParameters
Ein Zeiger auf eine NDIS_RECEIVE_THROTTLE_PARAMETERS-Struktur gibt die maximale Anzahl von NET_BUFFER_LIST Strukturen an, die ein Miniporttreiber in einem DPC angeben soll.
NdisReserved1
Reserviert für NDIS.
[in] NdisReserved2
Reserviert für NDIS.
Rückgabewert
Keine
Bemerkungen
Miniport-Treiber, die einen Nachrichtensignal-Interrupt bei der NdisMRegisterInterruptEx-Funktion registrieren, müssen eine MiniportMessageInterruptDPC-Funktion bereitstellen.
NDIS ruft MiniportMessageInterruptDPC 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 Ursache des Interrupts eine Änderung des Linkzustands ist, gibt der Miniporttreiber die neue Verknüpfung 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 MiniportMessageInterruptDPC. 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 MiniportMessageInterruptDPC sortieren.
MiniportMessageInterruptDPC ruft die auf NdisMIndicateReceiveNetBufferLists-Funktion , um die Pakete auf dem aktuellen Prozessor anzugeben. MiniportMessageInterruptDPC kann die Verarbeitung ermitteln, die für andere CPUs erforderlich ist, und NDIS anfordern, DPCs auf CPUs zu planen, bei denen ein DPC nicht aussteht.
Wenn der aktuelle DPC auf derselben CPU ausgeführt wird wie MiniportMessageInterrupt-Funktion , der Miniporttreiber sollte 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 MiniportMessageInterruptDPC die Unterbrechungen für die 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 deaktiviert. MiniportMessageInterrupt-Funktion . Bevor die Steuerung zurückgegeben wird, kann MiniportMessageInterruptDPC 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, nachdem der letzte DPC ausgeführt wurde.
Ein Miniporttreiber kann NdisMDeregisterInterruptEx über seine MiniportInitializeEx - oder MiniportHaltEx-Funktion aufrufen, um Ressourcen freizugeben, die er mit NdisMRegisterInterruptEx zugeordnet hat. Nachdem NdisMDeregisterInterruptEx zurückgegeben wurde , ruft NDIS die MiniportMessageInterrupt - oder MiniportMessageInterruptDPC-Funktion eines Miniporttreibers nicht auf.
NDIS ruft MiniportMessageInterruptDPC unter IRQL = DISPATCH_LEVEL auf.
Beispiele
Um eine MiniportMessageInterruptDPC-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 MiniportMessageInterruptDPC-Funktion mit dem Namen "MyMessageInterruptDPC" zu definieren, verwenden Sie den typ MINIPORT_MESSAGE_INTERRUPT_DPC , 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 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 MINIPORT_MESSAGE_INTERRUPT_DPC 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) | Unterstützt in NDIS 6.0 und höher. |
Zielplattform | Windows |
Kopfzeile | ndis.h (include Ndis.h) |
IRQL | DISPATCH_LEVEL |