MINIPORT_SYNCHRONIZE_INTERRUPT Rückruffunktion (ndis.h)
Ein Miniporttreiber muss einen MiniportSynchronizeInterrupt-Handler bereitstellen, wenn eine Treiberfunktion, die mit weniger als DIRQL ausgeführt wird, Ressourcen mit der MiniportInterrupt-Funktion gemeinsam verwendet .
Für Signalunterbrechungen von Nachrichten stellt der Miniporttreiber einen MiniportSynchronizeMessageInterrupt-Handler bereit, wenn eine Treiberfunktion, die mit weniger als DIRQL ausgeführt wird, Ressourcen für einen signalisierten Interrupt mit der Funktion MiniportMessageInterrupt gemeinsam verwendet.
Syntax
MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;
BOOLEAN MiniportSynchronizeInterrupt(
[in] NDIS_HANDLE SynchronizeContext
)
{...}
Parameter
[in] SynchronizeContext
Ein Handle für einen Kontextbereich, der bereitgestellt wird, wenn die MiniportXxx - oder interne Funktion des Miniport-Treibers die NdisMSynchronizeWithInterruptEx-Funktion .
Rückgabewert
MiniportSynchronizeInterrupt gibt einen booleschen Wert mit einer vom Treiber bestimmten Bedeutung zurück. NDIS gibt den gleichen Wert zurück, wenn NDIS von NdisMSynchronizeWithInterruptEx zurückgibt.
Hinweise
Um den Zugriff auf freigegebene Ressourcen mit MiniportInterrupt zu synchronisieren, müssen Treiberfunktionen mit niedrigerer Priorität die NdisMSynchronizeWithInterruptEx-Funktion . Die MiniportSynchronizeInterrupt-Funktion des Treibers greift auf die freigegebenen Ressourcen unter DIRQL zu. Der Aufruf von NdisMSynchronizeWithInterruptEx verhindert Rennensbedingungen und Deadlocks in einem solchen Miniport-Fahrer.
Alle Treiberfunktionen mit niedrigerer Priorität, die Ressourcen untereinander gemeinsam nutzen (aber nicht mit einer Funktion, die bei DIRQL ausgeführt wird), sollten eine Drehsperre verwenden, um diese freigegebenen Ressourcen zu schützen.
MiniportSynchronizeInterrupt wird auf der DIRQL ausgeführt, die zugewiesen ist, wenn die MiniportInitializeEx-Funktion des Treibers die NdisMRegisterInterruptEx-Funktion . Wie jede Treiberfunktion, die bei DIRQL ausgeführt wird, sollte MiniportSynchronizeInterrupt die Steuerung so schnell wie möglich zurück an den Aufrufer zurückgeben, und es kann nur die NdisXxx-Funktionen aufrufen, die sicher in jedem IRQL aufrufen können.
Beispiele
Um eine MiniportSynchronizeInterrupt-Funktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der zu definierenden Funktion identifiziert. 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 MiniportSynchronizeInterrupt-Funktion mit dem Namen "MySynchronizeInterrupt" zu definieren, verwenden Sie den typ MINIPORT_SYNCHRONIZE_INTERRUPT , 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 signalisierte Interrupts von Nachrichten zu definieren, verwenden Sie den typ MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT , 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 funktionstypen MINIPORT_SYNCHRONIZE_INTERRUPT und MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT sind in der Ndis.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, müssen Sie die Use_decl_annotations-Anmerkung zu Ihren Funktionsdefinitionen hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den 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 | Siehe Abschnitt "Hinweise" |