Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Miniporttreiber muss einen MiniportMessageInterruptDPC- Handler bereitstellen, wenn der Treiber den 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 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.
NdisReserved1
Reserviert für NDIS.
[in] NdisReserved2
Reserviert für NDIS.
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.
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_ENTRY NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS NdisMIndicateReceiveNetBufferListsRSS- (Receive Side Scaling)