Partager via


Initialisation d’un pilote Miniport

Lorsqu’un périphérique réseau devient disponible, le système charge le pilote miniport NDIS pour gérer l’appareil (si le pilote n’est pas déjà chargé). Chaque pilote miniport doit fournir une fonction DriverEntry . Le système appelle DriverEntry après avoir chargé le pilote. DriverEntry enregistre les caractéristiques du pilote miniport auprès de NDIS (y compris la version NDIS prise en charge et les points d’entrée 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.

Dans DriverEntry, les pilotes miniport transmettent ces deux pointeurs dans un appel à la fonction NdisMRegisterMiniportDriver . Les pilotes Miniport exportent un ensemble de fonctions MiniportXxx standard en stockant leurs points d’entrée dans une structure NDIS_MINIPORT_DRIVER_CHARACTERISTICS et en transmettant cette structure à NdisMRegisterMiniportDriver.

DriverEntry pour les pilotes miniport retourne la valeur retournée par l’appel à NdisMRegisterMiniportDriver.

Un pilote miniport effectue également toute autre initialisation spécifique au pilote dont il a besoin dans DriverEntry. Le pilote effectue une initialisation spécifique à l’adaptateur dans la fonction MiniportInitializeEx . Pour plus d’informations sur l’initialisation de l’adaptateur, consultez Initialisation d’un adaptateur.

DriverEntry peut allouer la structure NDIS_MINIPORT_DRIVER_CHARACTERISTICS sur la pile, car la bibliothèque NDIS copie les informations pertinentes dans son propre stockage. DriverEntry doit effacer la mémoire de cette structure avec NdisZeroMemory avant de définir les valeurs fournies par le pilote dans ses membres. Les membres MajorNdisVersion et MinorNdisVersion doivent contenir les versions principale et mineure de NDIS prises en charge par le pilote. Dans chaque membre XxxHandler de la structure des caractéristiques, DriverEntry doit définir le point d’entrée d’une fonction MiniportXxx fournie par le pilote, ou le membre doit avoir la valeur NULL.

Pour permettre à un pilote miniport de configurer des services facultatifs, NDIS appelle la fonction MiniportSetOptions dans le contexte de l’appel du pilote miniport à NdisMRegisterMiniportDriver. Pour plus d’informations sur les services facultatifs, consultez Configuration des services de pilotes Miniport facultatifs.

Les pilotes qui appellent NdisMRegisterMiniportDriver doivent être prêts pour que NDIS appelle leurs fonctions MiniportInitializeEx à tout moment après le retour de DriverEntry . Un tel pilote doit disposer d’informations d’installation et de configuration suffisantes stockées dans le Registre ou disponibles à partir des appels à une fonction de configuration spécifique au type de bus NdisXxx pour configurer toutes les ressources spécifiques à la carte réseau dont le pilote aura besoin pour effectuer des opérations d’E/S réseau.

Le pilote miniport doit finalement appeler NdisMDeregisterMiniportDriver pour libérer les ressources qu’il a allouées en appelant NdisMRegisterMiniportDriver. Si l’initialisation du pilote échoue après la réussite de l’appel à NdisMRegisterMiniportDriver , le pilote peut appeler NdisMDeregisterMiniportDriver à partir de DriverEntry. Sinon, le pilote miniport doit libérer les ressources spécifiques au pilote qu’il alloue dans sa fonction MiniportDriverUnload . En d’autres termes, si NdisMRegisterMiniportDriver ne retourne pas NDIS_STATUS_SUCCESS, DriverEntry doit libérer les ressources qu’il a allouées avant de renvoyer le contrôle. Le pilote n’est pas chargé si cela se produit. Pour plus d’informations, consultez Déchargement d’un pilote Miniport.