Behandeln eines MSI-Interrupts

NDIS ruft die MiniportMessageInterrupt-Funktion auf, wenn eine Netzwerkschnittstelle Karte (NIC) einen Interrupt generiert. Der MessageId-Parameter in dieser Funktion identifiziert die MSI-X-Nachricht.

MiniportMessageInterrupt sollte nach der Verarbeitung des Interrupts immer TRUE zurückgeben, da Nachrichtenunterbrechungen nicht freigegeben werden.

Ein Miniporttreiber sollte in seiner MiniportMessageInterrupt-Funktion so wenig Wie möglich arbeiten. Der Treiber sollte E/A-Vorgänge auf die Funktion MiniportMessageInterruptDpc zurückstellen, die von NDIS aufgerufen wird, um die verzögerte Verarbeitung eines Interrupts abzuschließen.

Um zusätzliche verzögerte Prozeduraufrufe (DPCs) nach der Rückgabe von MiniportMessageInterrupt in die Warteschlange zu stellen, legt der Miniporttreiber die Bits des TargetProcessors-Parameters der MiniportMessageInterrupt-Funktion fest. Um zusätzliche DPCs von MiniportMessageInterrupt oder MiniportMessageInterruptDPC anzufordern, kann der Miniporttreiber die Funktion NdisMQueueDpc aufrufen.

Der Miniporttreiber kann NdisMQueueDpc aufrufen, um zusätzliche DPCs für andere Prozessoren anzufordern.

Mit NDIS 6.1 und höheren Versionen wird sichergestellt, dass DPCs für verschiedene Nachrichten, die für dieselbe CPU geplant sind, separat in die Warteschlange eingereiht werden. Wenn beispielsweise ein Miniporttreiber zwei DPCs gleichzeitig auf CPU 1 plant (ein DPC für Nachricht 0 und der andere DPC für Meldung 1), werden zwei DPCs für CPU 1 in die Warteschlange gestellt (ein DPC mit Meldung 0 und der andere DPC mit Meldung 1).

NDIS garantiert außerdem, dass DPCs für dieselbe Nachricht, die auf verschiedenen CPUs geplant sind, separat in die Warteschlange eingereiht werden. Wenn beispielsweise ein Miniporttreiber zwei DPCs plant (ein DPC auf CPU 0 für Nachricht 0 und ein DPC auf CPU 1 für Nachricht 0), werden zwei separate DPCs in die Warteschlange für CPU 0 und CPU 1 eingereiht, beide für Meldung 0.