Préinscription MSI-X
Pour prendre en charge la modification des affinités d’interruption pour MSI-X ou pour supprimer les ressources d’interruption de message, un pilote miniport doit établir une fonction de filtre des exigences de ressources. Cette étape de préinscription se produit avant que NDIS appelle la fonction MiniportInitializeEx .
Pour établir une fonction de filtre des exigences de ressources, le pilote miniport doit fournir une fonction MiniportSetOptions . Lorsque le pilote miniport appelle la fonction NdisMRegisterMiniportDriver à partir de la routine DriverEntry , le pilote passe le point d’entrée pour MiniportSetOptions dans la structure NDIS_MINIPORT_DRIVER_CHARACTERISTICS . NDIS appelle la fonction MiniportSetOptions dans le contexte de NdisMRegisterMiniportDriver.
À partir de MiniportSetOptions, le pilote miniport appelle la fonction NdisSetOptionalHandlers et spécifie une structure NDIS_MINIPORT_PNP_CHARACTERISTICS . Cette structure définit les points d’entrée pour les fonctions MiniportAddDevice, MiniportRemoveDevice, MiniportStartDevice et MiniportFilterResourceRequirements .
Lorsque NDIS reçoit une demande d’ajout de périphérique du gestionnaire Plug-and-Play (PnP), NDIS appelle la fonction MiniportAddDevice du pilote miniport. Le handle que NDIS transmet à MiniportAddDevice dans le paramètre MiniportAdapterHandle est le handle que NDIS transmet ultérieurement à la fonction MiniportInitializeEx .
Dans MiniportAddDevice, le pilote initialise une structure NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES et transmet cette structure à la fonction NdisMSetMiniportAttributes . La structure NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES contient le membre MiniportAddDeviceContext qui est un handle à une zone de contexte allouée par le pilote miniport pour l’appareil. NDIS fournit ultérieurement ce handle de contexte aux fonctions MiniportRemoveDevice, MiniportFilterResourceRequirements, MiniportStartDevice et MiniportInitializeEx . Pour MiniportInitializeEx, le handle de contexte est passé dans le membre MiniportAddDeviceContext de la structure NDIS_MINIPORT_INIT_PARAMETERS vers laquelle pointe le paramètre MiniportInitParameters .
Une fois que NDIS a appelé MiniportAddDevice et MiniportAddDevice retourne NDIS_STATUS_SUCCESS, NDIS appelle la fonction MiniportFilterResourceRequirements chaque fois qu’elle reçoit le paquet de requête d’E /S (IRP) IRP_MN_FILTER_RESOURCE_REQUIREMENTS. MiniportFilterResourceRequirements peut modifier l’affinité d’interruption pour chaque message MSI-X, ajouter des ressources d’interruption de message ou supprimer des ressources d’interruption de message si le pilote s’inscrit pour les interruptions basées sur les lignes dans la fonction MiniportInitializeEx . Pour plus d’informations sur l’établissement d’une stratégie d’affinité d’interruption, consultez Filtrage des ressources MSI-X.
Lorsque NDIS reçoit une demande remove-device du gestionnaire PnP, NDIS appelle la fonction MiniportRemoveDevice du pilote miniport. La fonction MiniportRemoveDevice doit annuler les opérations effectuées par la fonction MiniportAddDevice .