Partager via


Gestion de la mémoire tampon des pilotes miniports

Les pilotes Miniport appellent généralement NdisAllocateNetBufferListPool à partir de MiniportInitializeEx pour créer un pool de structures NET_BUFFER_LIST . Les pilotes miniport utilisent ces structures pour indiquer les données reçues.

En règle générale, un pilote miniport qui alloue une structure de NET_BUFFER_LIST alloue et met en file d’attente une structure NET_BUFFER sur cette structure NET_BUFFER_LIST. Il est plus efficace de préallouer NET_BUFFER structures lorsque vous allouez un pool de structures NET_BUFFER_LIST que d’allouer des structures NET_BUFFER_LIST et des structures NET_BUFFER séparément.

Les pilotes Miniport peuvent appeler NdisAllocateNetBufferListPool et définir le paramètre AllocateNetBuffer sur TRUE pour indiquer que NET_BUFFER structures sont préallouées. Dans ce cas, une structure NET_BUFFER est préallouée avec chaque structure NET_BUFFER_LIST que le pilote alloue à partir du pool. Ces pilotes doivent appeler NdisAllocateNetBufferAndNetBufferList pour allouer des structures à partir de ce pool.

En règle générale, un pilote miniport appelle NdisAllocateNetBufferAndNetBufferList à partir de MiniportInitializeEx pour allouer autant de mémoires tampons qu’il en aura besoin pour les opérations de réception suivantes. Dans ce cas, le pilote gère une liste interne de mémoires tampons libres.

La fonction MiniportReturnNetBufferLists peut préparer une structure de NET_BUFFER_LIST retournée pour une réutilisation dans une indication de réception ultérieure. Bien que MiniportReturnNetBufferLists puisse renvoyer les structures NET_BUFFER_LIST à un pool (par exemple, il peut appeler NdisFreeNetBufferList), il peut être plus efficace de réutiliser les structures sans les renvoyer au pool.

Un pilote miniport doit libérer toutes les structures NET_BUFFER_LIST et les données associées lorsque NDIS arrête l’adaptateur. Un pilote peut appeler NdisFreeNetBufferList pour libérer les structures et la fonction NdisFreeNetBufferListPool pour libérer le pool NET_BUFFER_LIST.