Pre-registrazione MSI-X
Per supportare la modifica delle affinità di interruzione per MSI-X o per rimuovere le risorse di interruzione dei messaggi, un driver miniport deve stabilire una funzione di filtro dei requisiti delle risorse. Questo passaggio di pre-registrazione si verifica prima che NDIS chiami la funzione MiniportInitializeEx .
Per stabilire una funzione di filtro dei requisiti delle risorse, il driver miniport deve fornire una funzione MiniportSetOptions . Quando il driver miniport chiama la funzione NdisMRegisterMiniportDriver dalla routine DriverEntry , il driver passa il punto di ingresso per MiniportSetOptions nella struttura NDIS_MINIPORT_DRIVER_CHARACTERISTICS . NDIS chiama la funzione MiniportSetOptions nel contesto di NdisMRegisterMiniportDriver.
Da MiniportSetOptions, il driver miniport chiama la funzione NdisSetOptionalHandlers e specifica una struttura NDIS_MINIPORT_PNP_CHARACTERISTICS. Questa struttura definisce i punti di ingresso per le funzioni MiniportAddDevice, MiniportRemoveDevice,MiniportStartDevice e MiniportFilterResourceResourceRequirements .
Quando NDIS riceve una richiesta di componente aggiuntivo dal gestore Plug and Play (PnP), NDIS chiama la funzione MiniportAddDevice del driver miniport . L'handle che NDIS passa a MiniportAddDevice nel parametro MiniportAdapterHandle è l'handle che NDIS successivamente passa alla funzione MiniportInitializeEx .
In MiniportAddDevice il driver inizializza una struttura NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES e passa questa struttura alla funzione NdisMSetMiniportAttributes . La struttura NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES contiene il membro MiniportAddDeviceContext che è un handle per un'area di contesto allocata da un driver miniport per il dispositivo. NDIS in seguito fornisce questo handle di contesto alle funzioni MiniportRemoveDevice, MiniportFilterResourceRequirements, MiniportStartDevice e MiniportInitializeEx . Per MiniportInitializeEx, l'handle di contesto viene passato al membro MiniportAddDeviceContext della struttura NDIS_MINIPORT_INIT_PARAMETERS a cui punta il parametro MiniportInitParameters .
Dopo che NDIS chiama MiniportAddDevice e MiniportAddDevice restituisce NDIS_STATUS_SUCCESS, NDIS chiama la funzione MiniportFilterResourceRequirements ogni volta che riceve il pacchetto di richiesta I/O IRP_MN_FILTER_RESOURCE_REQUIREMENTS (IRP). MiniportFilterResourceRequirements può modificare l'affinità di interruzione per ogni messaggio MSI-X, aggiungere risorse di interruzione dei messaggi o rimuovere le risorse di interruzioni dei messaggi se il driver registrerà gli interruzioni basati su riga nella funzione MiniportInitializeEx . Per altre informazioni sulla definizione di un criterio di affinità di interruzione, vedere Filtro risorse MSI-X.
Quando NDIS riceve una richiesta remove-device dalla gestione PnP, NDIS chiama la funzione MiniportRemoveDevice del driver miniport . La funzione MiniportRemoveDevice deve annullare le operazioni eseguite dalla funzione MiniportAddDevice .