Pilotes miniport NDIS désérialisés

Tous les pilotes NDIS 6.0 et ultérieur sont désérialisés.

Un pilote miniport NDIS désérialisé sérialise le fonctionnement de ses propres fonctions MiniportXxx et met en file d’attente en interne toutes les demandes d’envoi au lieu de s’appuyer sur NDIS pour effectuer ces fonctions. Par conséquent, un pilote miniport désérialisé peut obtenir de meilleures performances en duplex complet qu’un pilote miniport sérialisé.

Le modèle de pilote désérialisé est le modèle par défaut pour les pilotes miniport NDIS. Les pilotes miniport orientés connexion, ainsi que les pilotes miniport avec un bord inférieur WDM, doivent être des pilotes désérialisés. Lors de l’écriture d’un nouveau pilote miniport NDIS, vous devez écrire un pilote désérialisé. Si possible, vous devez également porter les pilotes plus anciens vers NDIS 6.0 ou version ultérieure. Pour plus d’informations sur le portage des pilotes, consultez :

Un pilote miniport désérialisé doit répondre aux exigences suivantes lorsqu’il s’interface avec NDIS :

  • Un pilote miniport désérialisé doit s’identifier comme tel pour NDIS lors de l’initialisation.

  • Un pilote miniport désérialisé doit effectuer toutes les demandes d’envoi de manière asynchrone. Pour effectuer une demande d’envoi, les pilotes miniport NDIS 6.0 et ultérieur sans connexion appellent la fonction NdisMSendNetBufferListsComplete . Les pilotes miniport NDIS 6.0 et ultérieur orientés connexion appellent la fonction NdisMCoSendNetBufferListsComplete .

  • Un pilote miniport désérialisé qui prend en charge NDIS 6.0 ou version ultérieure définit le membre Status de la structure NET_BUFFER_LIST qu’il passera à NdisMSendNetBufferListsComplete.

  • Si un pilote miniport désérialisé ne peut pas terminer immédiatement les demandes d’envoi, il ne peut pas retourner les demandes à NDIS pour la mise en file d’attente. Au lieu de cela, le pilote miniport doit mettre en file d’attente les demandes d’envoi en interne jusqu’à ce que des ressources suffisantes soient disponibles pour transmettre les données.

  • Un pilote de miniport désérialisé ne doit pas examiner les structures qu’il transmet à NDIS dans les indications de réception tant que NDIS ne les a pas retournées. NDIS retourne NET_BUFFER_LIST structures à la fonction MiniportReturnNetBufferLists d’un pilote miniport.

Un pilote miniport désérialisé doit répondre aux exigences internes du pilote suivantes :

  • Un pilote miniport désérialisé doit protéger ses files d’attente de mémoire tampon réseau avec des verrous de rotation. Un pilote miniport désérialisé doit également protéger son état partagé contre l’accès simultané par ses propres fonctions MiniportXxx .

  • Les fonctions MiniportXxx d’un pilote miniport désérialisé peuvent s’exécuter à IRQL <= DISPATCH_LEVEL. Par conséquent, l’enregistreur de pilotes ne peut pas supposer que les fonctions MiniportXxx seront appelées dans la séquence dans laquelle elles traitent les demandes. Une fonction MiniportXxx peut préempter une autre fonction MiniportXxx qui s’exécute à un IRQL inférieur.

  • Un pilote miniport désérialisé est responsable de la gestion de la file d’attente de mémoire tampon réseau. Lorsque le pilote miniport rencontre un problème de ressource, il ne peut pas renvoyer de demandes d’envoi à NDIS pour la mise en file d’attente. Au lieu de cela, le pilote miniport doit mettre en file d’attente toutes les demandes d’envoi en interne jusqu’à ce que les ressources suffisantes soient disponibles pour envoyer les données.

  • Un pilote miniport désérialisé doit terminer l’envoi des demandes dans l’ordre déterminé par le protocole.

Pour plus d’informations sur les exigences d’envoi et de réception pour les pilotes NDIS, consultez Opérations d’envoi et de réception.

Notez qu’un pilote miniport désérialisé effectue généralement l’envoi des demandes dans l’ordre déterminé par le protocole. Toutefois, un pilote miniport qui prend en charge la priorité des paquets (par exemple, IEEE 802.1p) peut réorganiser les demandes d’envoi en fonction des informations de priorité.