Freigeben über


MINIPORT_SYNCHRONIZE_INTERRUPT Rückruffunktion (ndis.h)

Ein Miniporttreiber muss einen MiniportSynchronizeInterrupt Handler bereitstellen, wenn eine Treiberfunktion, die unter DIRQL ausgeführt wird, Ressourcen mit der MiniportInterrupt--Funktion gemeinsam verwendet.

Bei Signalunterbrüchen stellt der Miniporttreiber einen MiniportSynchronizeMessageInterrupt Handler bereit, wenn eine Treiberfunktion, die unter DIRQL ausgeführt wird, Ressourcen für eine Meldung teilt, die mit der MiniportMessageInterrupt Funktion signalisiert wird.

Hinweis Sie müssen diese Funktion entweder mithilfe des MINIPORT_SYNCHRONIZE_INTERRUPT Typs für Nichtnachricht signalisierter Interrupts oder mithilfe des MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT Typs für Signalunterbruchnachrichten deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt "Beispiele".
 

Syntax

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

BOOLEAN MiniportSynchronizeInterrupt(
  [in] NDIS_HANDLE SynchronizeContext
)
{...}

Parameter

[in] SynchronizeContext

Ein Handle zu einem Kontextbereich, der angegeben wird, wenn der Miniporttreiber MiniportXxx- oder interne Funktion aufgerufen wird NdisMSynchronizeWithInterruptEx Funktion.

Rückgabewert

MiniportSynchronizeInterrupt gibt einen booleschen Wert mit einer treiberbestimmten Bedeutung zurück. NDIS gibt denselben Wert zurück, wenn NDIS von NdisMSynchronizeWithInterruptExzurückgibt.

Bemerkungen

Hinweis Die Informationen in diesem Abschnitt können auch auf Signalunterbrüche angewendet werden, indem sie "MiniportInterrupt" für "MiniportMessageInterrupt" ersetzen und "MiniportSynchronizeInterrupt" für "MiniportSynchronizeInterrupt" ersetzen.
 
Wenn eine Miniporttreiberfunktion, die unter DIRQL ausgeführt wird, Ressourcen wie NIC-Register mit der MiniportInterrupt--Funktion des Treibers gemeinsam verwendet wird, kann dieser Treiber nicht direkt auf diese Ressourcen zugreifen. Wenn eine solche Funktion mit niedrigerer Priorität versucht, direkt auf die freigegebenen Ressourcen zuzugreifen, kann es von MiniportInterruptvorgedrängt werden, was die Zustandsänderungen der Funktion mit niedrigerer Priorität überschreiben könnte.

Um den Zugriff auf freigegebene Ressourcen mit MiniportInterruptzu synchronisieren, müssen Treiberfunktionen mit niedrigerer Priorität die NdisMSynchronizeWithInterruptEx Funktion. Die MiniportSynchronizeInterrupt-Funktion des Treibers greift auf die freigegebenen Ressourcen bei DIRQL zu. Das Aufrufen NdisMSynchronizeWithInterruptEx verhindert Rennbedingungen und Deadlocks in einem solchen Miniportfahrer.

Alle Treiberfunktionen mit niedrigerer Priorität, die Ressourcen gemeinsam nutzen (jedoch nicht mit einer Funktion, die bei DIRQL ausgeführt wird), sollten eine Drehsperre verwenden, um diese freigegebenen Ressourcen zu schützen.

MiniportSynchronizeInterrupt wird bei der DIRQL ausgeführt, die zugewiesen wird, wenn die MiniportInitialize Ex-Funktion des Treibers die Funktion aufruft Funktion NdisMRegisterInterruptEx. Wie jede Treiberfunktion, die bei DIRQL ausgeführt wird, sollten MiniportSynchronizeInterrupt- die Steuerung so schnell wie möglich wieder an den Aufrufer zurückgeben, und sie kann nur die NdisXxx- Funktionen aufrufen, die sicher bei jedem IRQL aufgerufen werden können.

beispiele für

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

MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
BOOLEAN
 MySynchronizeInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

Um eine MiniportSynchronizeMessageInterrupt--Funktion für Signalunterbrüche zu definieren, verwenden Sie den MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT Typ wie in diesem Codebeispiel gezeigt:

MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
BOOLEAN
 MySynchronizeMessageInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

Die MINIPORT_SYNCHRONIZE_INTERRUPT- und MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT Funktionstypen werden in der Ndis.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie die Use_decl_annotations Anmerkung zu Ihren Funktionsdefinitionen hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp 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- Siehe Abschnitt "Hinweise"

Siehe auch

MiniportInetrrupt

MiniportInitializeEx-

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx