Freigeben über


MINIPORT_MESSAGE_INTERRUPT Rückruffunktion (ndis.h)

NDIS ruft die MiniportMessageInterrupt--Funktion auf, wenn eine NIC einen nachrichtenbasierten Interrupt generiert.

Hinweis Sie müssen die Funktion mithilfe des MINIPORT_MESSAGE_INTERRUPT Typs deklarieren. Weitere Informationen finden Sie im folgenden Abschnitt "Beispiele".
 

Syntax

MINIPORT_MESSAGE_INTERRUPT MiniportMessageInterrupt;

BOOLEAN MiniportMessageInterrupt(
  [in]  NDIS_HANDLE MiniportInterruptContext,
  [in]  ULONG MessageId,
  [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.

[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 an der MessageInfoTable Member, wenn der Treiber erfolgreich für MSI mit der NdisMRegisterInterruptEx--Funktion registriert wird.

[out] QueueDefaultInterruptDpc

Ein Zeiger auf eine boolesche Variable, die der Miniporttreiber vor der Rückgabe von diesem Aufruf festlegt. 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 dieser Wert auf FALSE-festgelegt ist, verwendet NDIS den Wert des TargetProcessors Parameter, um DPCs zu planen.

[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.

Hinweis NDIS 6.20 und höher sollten diesen Parameter nicht zum Planen von DPCs verwenden. Stattdessen sollten sie diesen Parameter auf Null festlegen und die NdisMQueueDpcEx--Funktion verwenden, um DPCs zu planen.
 

Rückgabewert

MiniportMessageInterrupt gibt TRUE zurück, wenn die zugrunde liegende NIC den Interrupt generiert hat; andernfalls wird FALSE-zurückgegeben.

Bemerkungen

Miniporttreiber, die sich für die Unterstützung von Nachrichtensignalunterbrüchen (MSI) mit der NdisMRegisterInterruptEx--Funktion registrieren, müssen eine MiniportMessageInterrupt--Funktion bereitstellen.

Ein Miniporttreiber sollte in seiner MiniportMessageInterrupt--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 MiniportMessageInterruptDPC Funktion.

Wenn eine NIC eine MSI generiert, ruft NDIS die MiniportMessageInterrupt-Funktion des Miniporttreibers auf.

MiniportMessageInterrupt speichert erforderliche Zustandsinformationen über den Interrupt und verzögert so viel E/A-Verarbeitung wie möglich auf die MiniportMessageInterruptDPC Funktion.

Wenn der Miniport-Treiber verzögerte Prozeduraufrufe (DPCs) für eine angegebene Nachricht anfordert, sollte der Miniporttreiber alle weiteren Unterbrechungen für diese Nachricht 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 einer anderen 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.
  • Die Skalierung der Empfangsseite ist für den Miniporttreiber aktiviert, und der Miniporttreiber kann unterschiedliche Nachrichten in jeder Empfangswarteschlange generieren.
Wenn ein Miniporttreiber Pakete in separaten DPCs verarbeitet, legt der Miniporttreiber die QueueDefaultInterruptDpc Parameter auf FALSE-fest. Der Miniporttreiber sollte die TargetProcessors Bit für die CPU festlegen, die jeder nicht ausstehenden Empfangswarteschlange zugeordnet ist. NDIS plant einen DPC auf jedem der angegebenen CPUs in Prozessorgruppe 0.

Wenn MiniportMessageInterrupt Ressourcen für eine angegebene Nachricht freigibt, z. B. NIC-Register oder Zustandsvariablen, mit einer anderen MiniportXxx--Funktion, die bei einer niedrigeren IRQL ausgeführt wird, muss MiniportXxx--Funktion die Funktion aufrufen NdisMSynchronizeWithInterruptEx Funktion. Dadurch wird sichergestellt, dass die MiniportSynchronizeMessageInterrupt Funktion auf die freigegebenen Ressourcen auf synchronisierte und multiprozessorsichere Weise zugreift.

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 MiniportMessageInterrupt oder MiniportMessageInterruptDPC Funktion nicht auf.

NDIS ruft MiniportMessageInterrupt an der DIRQL der MSI auf, die der Miniporttreiber in einem vorherigen Aufruf von NdisMRegisterInterruptExregistriert hat. Daher müssen MiniportMessageInterrupt- die Teilmenge der NDIS-Funktionen aufrufen, z. B. die NdisRawXxx oder NdisRead/WriteRegisterXxx--Funktionen, die sicher für alle IRQL-Funktionen sind.

beispiele für

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

MINIPORT_MESSAGE_INTERRUPT MyMessageInterrupt;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
BOOLEAN
 MyMessageInterrupt(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PBOOLEAN  QueueDefaultInterruptDpc,
    PULONG  TargetProcessors
    )
  {...}

Der MINIPORT_MESSAGE_INTERRUPT 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 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

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx-

MiniportMessageInterruptDPC

MiniportSynchronizeMessageInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS

NdisMDeregisterInterruptEx

NdisMQueueDpcEx

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx OID_GEN_RECEIVE_SCALE_CAPABILITIES OID_GEN_RECEIVE_SCALE_PARAMETERS

RSS- (Receive Side Scaling)