MSI-X Vorregistrierung

Um das Ändern von Interruptaffinitäten für MSI-X zu unterstützen oder Nachrichtenunterbrechungsressourcen zu entfernen, muss ein Miniporttreiber eine Filterfunktion für Ressourcenanforderungen einrichten. Dieser Schritt vor der Registrierung erfolgt, bevor NDIS die MiniportInitializeEx-Funktion aufruft.

Um eine Filterfunktion für Ressourcenanforderungen einzurichten, muss der Miniporttreiber eine MiniportSetOptions-Funktion bereitstellen. Wenn der Miniporttreiber die NdisMRegisterMiniportDriver-Funktion aus der DriverEntry-Routine aufruft, übergibt der Treiber den Einstiegspunkt für MiniportSetOptions in der NDIS_MINIPORT_DRIVER_CHARACTERISTICS-Struktur . NDIS ruft die MiniportSetOptions-Funktion im Kontext von NdisMRegisterMiniportDriver auf.

In MiniportSetOptions ruft der Miniporttreiber die NdisSetOptionalHandlers-Funktion auf und gibt eine NDIS_MINIPORT_PNP_CHARACTERISTICS Struktur an. Diese Struktur definiert die Einstiegspunkte für die Funktionen MiniportAddDevice, MiniportRemoveDevice, MiniportStartDevice und MiniportFilterResourceRequirequirements .

Wenn NDIS eine Add-Device-Anforderung vom PnP-Manager (Plug & Play) empfängt, ruft NDIS die MiniportAddDevice-Funktion des Miniporttreibers auf. Das Handle, das NDIS im MiniportAdapterHandle-Parameter an MiniportAddDevice übergibt, ist das Handle, das NDIS später an die Funktion MiniportInitializeEx übergibt.

In MiniportAddDevice initialisiert der Treiber eine NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES-Struktur und übergibt diese Struktur an die NdisMSetMiniportAttributes-Funktion . Die NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES-Struktur enthält den MiniportAddDeviceContext-Member , der ein Handle für einen vom Miniporttreiber zugewiesenen Kontextbereich für das Gerät ist. NDIS stellt später diesen Kontexthandle für die Funktionen MiniportRemoveDevice, MiniportFilterResourceRequirements, MiniportStartDevice und MiniportInitializeEx bereit. Für MiniportInitializeEx wird das Kontexthandle im MiniportAddDeviceContext-Element der NDIS_MINIPORT_INIT_PARAMETERS-Struktur übergeben, auf die der MiniportInitParameters-Parameter verweist.

Nachdem NDIS MiniportAddDevice aufgerufen hat und MiniportAddDevice NDIS_STATUS_SUCCESS zurückgibt, ruft NDIS die MiniportFilterResourceRequirequirements-Funktion jedes Mal auf, wenn es das IRP_MN_FILTER_RESOURCE_REQUIREMENTS E/A-Anforderungspaket (IRP) empfängt. MiniportFilterResourceRequirerements kann die Interruptaffinität für jede MSI-X-Nachricht ändern, Nachrichtenunterbrechungsressourcen hinzufügen oder Nachrichtenunterbruchressourcen entfernen, wenn der Treiber für zeilenbasierte Interrupts in der MiniportInitializeEx-Funktion registriert. Weitere Informationen zum Einrichten einer Interruptaffinitätsrichtlinie finden Sie unter MSI-X-Ressourcenfilterung.

Wenn NDIS eine Remove-Device-Anforderung vom PnP-Manager empfängt, ruft NDIS die MiniportRemoveDevice-Funktion des Miniport-Treibers auf. Die MiniportRemoveDevice-Funktion sollte die Von der MiniportAddDevice-Funktion ausgeführten Vorgänge rückgängig gemacht werden.