Initialisation d’un pilote de filtre

L’initialisation du pilote de filtre se produit immédiatement après le chargement du pilote par le système. Les pilotes de filtre se chargent en tant que services système. Le système peut charger les pilotes de filtre à tout moment avant, pendant ou après le chargement des pilotes miniport. NDIS peut attacher un module de filtre à un adaptateur miniport une fois qu’un adaptateur miniport du type pris en charge par le pilote de filtre est disponible et que l’initialisation du pilote de filtre est terminée.

Pendant le démarrage d’une pile de pilotes, le système charge les pilotes de filtre s’ils ne sont pas déjà chargés. Pour plus d’informations sur le démarrage d’une pile de pilotes qui inclut des modules de filtre, consultez Démarrage d’une pile de pilotes.

Après le chargement d’un pilote de filtre, le système appelle la routine DriverEntry du pilote.

Le système transmet deux arguments à DriverEntry :

  • Pointeur vers l’objet pilote, qui a été créé par le système d’E/S.

  • Pointeur vers le chemin du Registre, qui spécifie où sont stockés les paramètres spécifiques au pilote.

DriverEntry retourne STATUS_SUCCESS, ou son NDIS_STATUS_SUCCESS équivalent, si le pilote a réussi à s’inscrire en tant que pilote de filtre NDIS. Si DriverEntry échoue à l’initialisation en propageant une erreur status retournée par une fonction NdisXxx ou par une routine de prise en charge en mode noyau, le pilote ne reste pas chargé. DriverEntry doit s’exécuter de manière synchrone ; autrement dit, il ne peut pas retourner STATUS_PENDING ou son NDIS_STATUS_PENDING équivalent.

Le pilote de filtre transmet l’objet driver à la fonction NdisFRegisterFilterDriver lorsqu’il s’inscrit auprès de NDIS en tant que pilote de filtre. Le pilote peut utiliser le chemin d’accès du Registre pour obtenir des informations de configuration. Pour plus d’informations sur l’accès aux informations de configuration du pilote de filtre, consultez Accès aux informations de configuration d’un pilote de filtre.

Un pilote de filtre appelle NdisFRegisterFilterDriver à partir de sa routine DriverEntry . Les pilotes de filtre exportent un ensemble de fonctions FilterXxx en passant une structure NDIS_FILTER_DRIVER_CHARACTERISTICS à NdisFRegisterFilterDriver au niveau du paramètre FilterCharacteristics .

La structure NDIS_FILTER_DRIVER_CHARACTERISTICS spécifie des points d’entrée pour les fonctions FilterXxx obligatoires et facultatives. Certaines fonctions facultatives peuvent être contournées. Pour plus d’informations sur le contournement des fonctions, consultez Mode de contournement des données.

Les pilotes qui appellent NdisFRegisterFilterDriver doivent être préparés pour un appel immédiat à l’une de leurs fonctions FilterXxx .

La structure NDIS_FILTER_DRIVER_CHARACTERISTICS spécifie les points d’entrée pour ces fonctions FilterXxx obligatoires :

FilterAttach

FilterDetach

FilterRestart

FilterPause

La structure NDIS_FILTER_DRIVER_CHARACTERISTICS spécifie les points d’entrée pour ces fonctions FilterXxx facultatives et non modifiables au moment de l’exécution :

FilterSetOptions

FilterSetModuleOptions

FilterOidRequest

FilterOidRequestComplete

FilterStatus

FilterNetPnPEvent

FilterDevicePnPEventNotify

FilterCancelSendNetBufferLists

La structure NDIS_FILTER_DRIVER_CHARACTERISTICS spécifie les points d’entrée par défaut pour ces fonctions FilterXxx facultatives et modifiables au moment de l’exécution :

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

Les quatre fonctions précédentes sont également définies dans la structure NDIS_FILTER_PARTIAL_CHARACTERISTICS . Cette structure spécifie les fonctions qui peuvent être modifiées au moment de l’exécution en appelant la fonction NdisSetOptionalHandlers à partir de la fonction FilterSetModuleOptions . Si un pilote de filtre modifie ces caractéristiques partielles au moment de l’exécution, il doit fournir le point d’entrée pour FilterSetModuleOptions. Les caractéristiques partielles peuvent être différentes pour chaque module de filtre. Pour plus d’informations, consultez Démarrage d’un module de filtre.

NDIS appelle la fonction FilterSetOptions dans le contexte de l’appel à NdisFRegisterFilterDriver. FilterSetOptions inscrit les services facultatifs auprès de NDIS. Pour plus d’informations, consultez Configuration des services de pilotes de filtre facultatifs.

Si l’appel à NdisFRegisterFilterDriver réussit, NDIS remplit la variable dans NdisFilterDriverHandle avec un handle de pilote de filtre. Le pilote de filtre enregistre ce handle et le transmet ultérieurement à des fonctions NDIS, telles que NdisFDeregisterFilterDriver, qui nécessitent un handle de pilote de filtre en tant que paramètre d’entrée. Lorsque le pilote se décharge, il doit appeler la fonction NdisFDeregisterFilterDriver pour libérer les ressources de pilote allouées par NdisFRegisterFilterDriver.

Une fois que FilterSetOptions est retourné, les modules de filtre sont à l’état Détaché . NDIS peut appeler la fonction FilterAttach du pilote de filtre à tout moment après le retour de l’appel à FilterSetOptions . Le pilote effectue une initialisation spécifique au module de filtre dans la fonction FilterAttach . Pour plus d’informations sur l’attachement d’un module de filtre à une pile de pilotes, consultez Attachement d’un module de filtre.

Un pilote de filtre effectue également toute autre initialisation spécifique au pilote dont il a besoin dans DriverEntry. Le pilote de filtre doit libérer les ressources spécifiques au pilote qu’il alloue dans sa routine FilterDriverUnload . Pour plus d’informations, consultez Déchargement d’un pilote de filtre.