Je travaille sur un pilote de filtre NDIS qui copie réellement les données de NET_BUFFERs dans les tampons alloués par le pilote dans le chemin d'envoi et les place dans une file d'attente interne. Plus tard, les données sont à nouveau copiées de ces tampons alloués par le pilote dans la file d'attente vers les tampons IRP. Je veux éviter cette copie de données.Comment éviter la copie de données dans le pilote de filtre NDIS
Sous Linux, nous pouvons créer un clone de skbuff et le skbuff cloné peut être mis en file d'attente pour une utilisation ultérieure. Y at-il une option similaire disponible dans Windows? S'il existe un moyen de cloner le NET_BUFFER, nous pouvons simplement éviter la première copie qui se passe de NET_BUFFER aux tampons de mémoire alloués au pilote.
S'il existe un moyen d'obtenir une copie nulle depuis les NetBufferLists vers les tampons IRP, alors ce serait vraiment une solution idéale. Il serait vraiment utile si quelqu'un peut proposer une meilleure solution pour éviter les copies dans le chemin d'envoi.
Merci pour la réponse! J'ai vraiment besoin de copier la charge utile dans NB et de la passer à un processus en mode utilisateur appelant read. À l'heure actuelle, dans SendNetBufferLists(), la charge utile dans NB est copiée dans un tampon intermédiaire alloué par le pilote et ce tampon intermédiaire est ajouté à une file d'attente. Dans la routine dispatch (read), le tampon intermédiaire est retiré de la file d'attente et copié dans le tampon IRP. Je veux copier la charge utile directement de NB vers le tampon IRP, ce qui devrait être possible si nous pouvons mettre NB dans une file d'attente. Cela permettrait d'économiser une copie. Ce serait vraiment utile si vous pouvez suggérer un moyen de le faire. –