MINIPORT_ISR Rückruffunktion (ndis.h)
NDIS ruft die MiniportInterrupt--Funktion auf, wenn eine NIC oder ein anderes Gerät, das den Interrupt mit der NIC teilt, einen Interrupt generiert.
Syntax
MINIPORT_ISR MiniportIsr;
BOOLEAN MiniportIsr(
[in] NDIS_HANDLE MiniportInterruptContext,
[out] PBOOLEAN QueueDefaultInterruptDpc,
[out] PULONG TargetProcessors
)
{...}
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.
[out] QueueDefaultInterruptDpc
Ein Zeiger auf eine BOOLEAN-Variable, die der Miniporttreiber festlegt, bevor er von diesem Aufruf zurückgegeben wird. Ein Miniporttreiber legt diesen Wert auf TRUE- fest, um anzugeben, dass der Treiber einen DPC für die Standard-CPU (aktuelle) CPU benötigt. Wenn dieser Wert auf TRUEfestgelegt ist, ignoriert NDIS den Wert des TargetProcessors-Parameters. Wenn sie auf FALSE-festgelegt ist, verwendet NDIS den Wert des TargetProcessors Parameter, um DPCs zu planen. Wenn QueueDefaultInterruptDpcTRUEist, plant NDIS einen DPC unabhängig vom Rückgabewert von MiniportInterrupt.
[out] TargetProcessors
Eine Bitmaske, die die Zielprozessoren angibt, für die NDIS einen DPC planen soll. Diese Bitmaske stellt die ersten 32 Prozessoren der Prozessorgruppe 0 dar. Jedes Bit in der Bitmaske identifiziert eine CPU. Wenn der Aufrufer Bit 0 festlegt, plant NDIS einen DPC für CPU 0. Wenn der Aufrufer Bit 1 festlegt, plant NDIS einen DPC für CPU 1 usw. Wenn QueueDefaultInterruptDpc- auf FALSE- festgelegt ist und TargetProcessors- auf Null festgelegt ist, plant NDIS keine DPCs. Andernfalls plant NDIS DPCs unabhängig vom Rückgabewert von MiniportInterrupt.
Rückgabewert
MiniportInterrupt gibt einen der folgenden Werte zurück:
Rückgabecode | Beschreibung |
---|---|
|
MiniportInterrupt festgestellt, dass die zugrunde liegende NIC den Interrupt generiert hat. |
|
MiniportInterrupt festgestellt, dass die zugrunde liegende NIC den Interrupt nicht generiert hat. |
Bemerkungen
Miniport-Treiber, die einen Interrupt beim NdisMRegisterInterruptEx--Funktion registrieren, müssen eine MiniportInterrupt--Funktion bereitstellen.
Ein Miniporttreiber sollte in seiner MiniportInterrupt Funktion so wenig wie möglich arbeiten. Es sollte E/A-Vorgänge für die Unterbrechungen zurückstellen, die der NIC für die MiniportInterruptDPC--Funktion generiert.
Wenn eine Unterbrechung in der Unterbrechungslinie einer NIC auftritt, ruft NDIS die MiniportInterrupt--Funktion des Miniporttreibers auf.
Alle NICs können leitungsbasierte Unterbrechungen für andere Geräte auf dem E/A-Bus freigeben. Wenn die NIC den Interrupt nicht generiert hat, sollte MiniportInterrupt sofort FALSE- zurückgeben, damit das System den Treiber des Geräts aufrufen kann, das den Interrupt generiert hat. Wenn die QueueDefaultInterruptDpc- auf FALSE- festgelegt ist und der parameter TargetProcessors auf Null festgelegt ist, plant NDIS keine DPCs. Andernfalls plant NDIS DPCs unabhängig vom reMiniportInterruptturn value from MiniportInterrupt.
Wenn der Interrupt für die NIC vorgesehen ist, schließt MiniportInterrupt den Interrupt auf der NIC ab, speichert den Zustand, den er über den Interrupt benötigt, und verschärft so viel der E/A-Verarbeitung wie möglich auf die MiniportInterruptDPC Funktion.
Wenn die zugrunde liegende NIC den angegebenen Interrupt generiert hat und der Miniporttreiber verzögerte Prozeduraufrufe (DPCs) anfordert, sollte der Miniporttreiber alle weiteren Unterbrechungen von der NIC deaktivieren und die Interrupts erneut aktivieren, nachdem alle DPCs abgeschlossen sind.
Der Miniporttreiber sollte QueueDefaultInterruptDpc- auf TRUE- festlegen, um einen DPC nur für die Standard-CPU zu planen. Der Treiber kann dies z. B. tun, wenn:
- Die NIC hat den Interrupt generiert, um den Abschluss eines Sendevorgangs oder eine andere Anforderung zu signalisieren, die nicht auf anderen CPUs ausgeführt wird.
- Die NIC hat den Interrupt generiert, um empfangene Daten zu signalisieren, und der Miniporttreiber kann empfangene Pakete nicht in separaten DPCs verarbeiten.
- Der Interrupt gibt empfangene Pakete an, und der Miniporttreiber kann empfangene Pakete in separaten DPCs verarbeiten, aber empfangene Seitenskalierung (RSS) für den Miniporttreiber nicht aktiviert ist. Weitere Informationen finden Sie unter OID_GEN_RECEIVE_SCALE_CAPABILITIES und OID_GEN_RECEIVE_SCALE_PARAMETERS.
Ein Miniporttreiber kann die NdisMDeregisterInterruptEx Funktion aus der MiniportInitializeEx oder MiniportHaltEx Funktion, um Ressourcen freizugeben, die mit NdisMRegisterInterruptExzugeordnet sind. Nachdem NdisMDeregisterInterruptEx- zurückgegeben wurde, ruft NDIS die MiniportInterrupt oder MiniportInterruptDPC- funktion nicht auf.
NDIS ruft MiniportInterrupt an der DIRQL des Interrupts auf, den der Miniporttreiber in einem vorherigen Aufruf von NdisMRegisterInterruptExregistriert hat. Daher müssen MiniportInterrupt- die Teilmenge der NDIS-Funktionen aufrufen, z. B. die NdisRawXxx oder NdisRead/WriteRegisterXxx--Funktionen, die sicher bei allen IRQL-Funktionen aufgerufen werden können.
beispiele für
Um eine MiniportInterrupt--Funktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration angeben, 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 MiniportInterrupt--Funktion zu definieren, die den Namen "MyInterrupt" hat, verwenden Sie den MINIPORT_ISR Typ, wie in diesem Codebeispiel gezeigt:
MINIPORT_ISR MyInterrupt;
Implementieren Sie dann Ihre Funktion wie folgt:
_Use_decl_annotations_
BOOLEAN
MyInterrupt(
NDIS_HANDLE MiniportInterruptContext,
PBOOLEAN QueueDefaultInterruptDpc,
PULONG TargetProcessors
)
{...}
Der MINIPORT_ISR 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_ISR 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
MiniportSynchronizeInterrupt NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NdisMSynchronizeWithInterruptEx OID_GEN_RECEIVE_SCALE_CAPABILITIES OID_GEN_RECEIVE_SCALE_PARAMETERSRSS- (Receive Side Scaling)