Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La latence est inhérente à certaines opérations réseau. En raison de cette latence, la plupart des fonctions supérieures fournies par un pilote miniport et les fonctions de bord inférieur d’un pilote de protocole sont conçues pour prendre en charge l’opération asynchrone. Au lieu de perdre des cycles de processeur en attente dans une boucle pour qu'une tâche fastidieuse se termine ou qu'un événement matériel se produise, les pilotes réseau s’appuient sur leur capacité à gérer la plupart des opérations de façon asynchrone.
Les E/S réseau asynchrones sont prises en charge à l’aide d’une fonction d’achèvement . L’exemple suivant illustre l’utilisation d’une fonction d’achèvement pour une opération d’envoi réseau, mais ce même mécanisme existe pour de nombreuses autres opérations effectuées par un protocole ou un pilote miniport.
Lorsqu’un pilote de protocole appelle NDIS pour envoyer un paquet, ce qui entraîne un appel à la fonction MiniportSendNetBufferLists du pilote Miniport, le pilote Miniport peut essayer d’effectuer cette requête immédiatement et retourner une valeur d’état appropriée en conséquence. Pour une opération synchrone, les réponses possibles sont NDIS_STATUS_SUCCESS pour réussir l’envoi, NDIS_STATUS_RESOURCES et NDIS_STATUS_FAILURE indiquant un échec d’un type quelconque.
Toutefois, une opération d’envoi peut prendre un certain temps pendant que le pilote miniport (ou NDIS) met en file d’attente le paquet et attend que la carte réseau indique le résultat de l’opération d’envoi. La fonction MiniportSendNetBufferLists du pilote miniport peut gérer cette opération de manière asynchrone en retournant une valeur d’état de NDIS_STATUS_PENDING. Lorsque le pilote miniport termine l’opération d’envoi, il appelle la fonction d’achèvement, NdisMSendNetBufferListsComplete, en passant un pointeur au descripteur de paquet qui a été envoyé. Ces informations sont transmises au pilote de protocole, signalant l’achèvement.
La plupart des opérations des pilotes pouvant nécessiter un temps prolongé pour s'achever prennent en charge le mode asynchrone avec une fonction de complétion similaire. Ces fonctions ont des noms de la forme NdisMXxxComplete.
Les fonctions d’achèvement sont également fournies pour :
Définir et interroger la configuration.
Réinitialiser le matériel.
Indiquez l’état.
Indiquez les données reçues.
Transférer les données reçues.