Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Miniport-Treiber müssen eine Filterfunktion für Ressourcenanforderungen registrieren, wenn sie MSI-X unterstützen und entweder die Interrupt-Affinität für jede MSI-X-Meldung ändern oder sie die Meldungsinterrupt-Ressourcen entfernen werden.
NDIS ruft die MiniportFilterResourceRequirements-Funktion auf, nachdem NDIS das IRP_MN_FILTER_RESOURCE_REQUIREMENTS E/A-Anforderungspaket (IRP) für eine Netzwerkschnittstellenkarte (NIC) empfängt. NDIS ruft MiniportFilterResourceRequirements auf, nachdem die zugrunde liegenden Funktionstreiber im Gerätestapel das IRP abgeschlossen haben.
NDIS ruft MiniportFilterResourceRequirements auf, nachdem die MiniportAddDevice-Funktion NDIS_STATUS_SUCCESS zurückgibt. NDIS kann MiniportFilterResourceRequirements jederzeit erneut aufrufen, bevor Sie MiniportRemoveDevice aufrufen. NDIS kann MiniportFilterResourceRequirements aufrufen, während der Miniport ausgeführt wird. Während der Miniport die Ressourcenliste wie unten beschrieben ändern kann, sollte der Miniport nicht sofort versuchen, die neuen Ressourcen zu verwenden. NDIS wird schließlich anhalten und den Miniport mit den neuen Ressourcen neu initialisieren; nur dann sollte der Miniport versuchen, die neuen Ressourcen zu verwenden.
IRP_MN_FILTER_RESOURCE_REQUIREMENTS stellt eine Ressourcenliste als IO_RESOURCE_REQUIREMENTS_LIST Struktur unter Irp-IoStatus.Information> bereit. Die Ressourcen in der Liste werden durch IO_RESOURCE_DESCRIPTOR Strukturen beschrieben.
Ein Miniporttreiber kann die Interrupt-Affinitätsrichtlinie für jede Ressource vom Typ CmResourceTypeInterrupt ändern, die eine MSI-X Nachricht beschreibt. Wenn eine Affinitätsrichtlinie die Zielbestimmung für eine bestimmte Gruppe von Prozessoren anfordert, legt der Miniporttreiber auch eine KAFFINITY-Maske bei Interrupt.TargetedProcessors in der IO_RESOURCE_DESCRIPTOR-Struktur fest.
Ein Miniporttreiber kann alle Ressourcen vom Typ CmResourceTypeInterrupt entfernen, die Nachrichtenunterbruchressourcen sind. Der Treiber kann sich dann für zeilenbasierte Unterbrechungen in der MiniportInitializeEx-Funktion registrieren. Wenn der Miniport-Treiber diese Nachrichtenunterbrechungsressourcen nicht entfernt, wird das Betriebssystem fehlschlagen, wenn der Treiber versucht, zeilenbasierte Unterbrechungen in MiniportInitializeEx zu registrieren.
Ein NDIS 6.1- oder höher-Miniporttreiber kann der Ressourcenliste Nachrichtenunterbruchressourcen hinzufügen. Wenn die NIC z. B. auf einem Computer mit acht CPUs vier MSI-X Nachrichten generieren kann und wenn das Betriebssystem die vier Nachrichtenunterbrechungen aktiviert, initialisiert das Betriebssystem vier Nachrichtentabelleneinträge im MSI-X Konfigurationsbereich des Geräts und platziert vier Nachrichtenunterbrechungsressourcen in der Ressourcenliste. Da der Miniporttreiber mehr Nachrichtenunterbrechungsressourcen erfordert, kann er der Ressourcenliste vier weitere Nachrichtenunterbrechungsressourcen zuordnen und die Affinität jeder MSI-X Nachricht auf eine CPU festlegen. Wenn das Betriebssystem mehr Nachrichtenunterbrechungsressourcen bereitstellen kann, empfängt der Miniportadapter acht Nachrichtenunterbrechungsressourcen, wenn er gestartet wird. In diesem Fall weisen die Nachrichten Zahlen von 0 bis 7 auf.
Jeder Nachrichtenunterbrechungsressource in der Liste wird später eine Nachrichtennummer zugewiesen, die der Reihenfolge entspricht, in der sie in der Liste angezeigt wird. Die erste Nachrichtenunterbrechungsressource in der Liste wird beispielsweise Nachricht 0 zugewiesen, die zweite Nachricht 1 und so weiter.
Um einer CPU zur Laufzeit einen MSI-X Tabelleneintrag zuzuweisen, kann der Miniporttreiber die NdisMConfigMSIXTableEntry-Funktion aufrufen, die einen Tabelleneintrag einer MSI-X Nachricht zuordnet, die bereits die Affinität auf die CPU festgelegt hat. Weitere Informationen zu Konfigurationsvorgängen für MSI-X Tabelleneinträge finden Sie unter Ändern der CPU-Affinität von MSI-X Tabelleneinträgen.
Verwenden Sie die Funktion NdisAllocateMemoryWithTagPriority , um Speicher für eine neue Liste der Ressourcenanforderungen zuzuweisen. Sie können den Speicher für die alte Ressourcenanforderungsliste mit der NdisFreeMemory-Funktion freigeben.
Miniport-Treiber sollten keine anderen Ressourcen ändern, z. B. CmResourceTypeMemory und CmResourceTypePort Ressourcen. Miniporttreiber sollten vermeiden, der Ressourcenliste eine neue Ressource hinzuzufügen. NDIS 6.1- und höher-Miniporttreiber können jedoch weitere Nachrichtenunterbrechungsressourcen hinzufügen. Wenn der Miniporttreiber weitere Nachrichtenunterbrechungsressourcen hinzufügt, darf er sie nicht aus der MiniportStartDevice-Funktion entfernen.
Weitere Informationen zum Hinzufügen und Entfernen von Ressourcen finden Sie unter IRP_MN_FILTER_RESOURCE_REQUIREMENTS.