Gestion des données mises en mémoire tampon
Plusieurs fonctions du fournisseur de réseau prennent l’adresse et la taille d’une mémoire tampon dans laquelle la fonction place une structure de données de taille variable.
Dans chaque cas, le mécanisme utilisé est le même. L’appelant alloue une mémoire tampon et transmet son adresse à la fonction . Il transmet également l’adresse d’un DWORD qui spécifie la taille de la mémoire tampon, en octets.
La fonction copie ensuite autant de la structure de données demandée que possible dans la mémoire tampon. Si toutes les données sont insérées dans la mémoire tampon, la fonction retourne WN_SUCCESS. Si les données ne tiennent pas dans la mémoire tampon, les données peuvent être incomplètes et la fonction définit l’erreur WN_MORE_DATA. Dans les deux cas, le DWORD indiquant la taille de la mémoire tampon est défini sur le nombre d’octets réellement requis par la structure de données. De cette façon, si la mémoire tampon passée était trop petite et que la fonction a échoué, l’appelant peut allouer une nouvelle mémoire tampon de la taille requise et appeler à nouveau la fonction.
Lorsque les structures de données retournées incluent des chaînes de longueur variable, les structures de données individuelles contiennent généralement des pointeurs vers ces chaînes. Les chaînes elles-mêmes doivent également être placées dans la mémoire tampon. Toutefois, il est important de les placer à la fin de la mémoire tampon. Sinon, elles rendent impossible l’indexation sur la Nième structure. En d’autres termes, toutes les structures sont situées contiguëment au début de la mémoire tampon. Les pointeurs vers des chaînes ou des données de longueur variable doivent être des pointeurs réels, et non des décalages dans la mémoire tampon.
Lorsqu’une mémoire tampon est utilisée pour transmettre et renvoyer des données qui se composent uniquement de chaînes, le DWORD spécifiant la taille de la mémoire tampon doit être défini sur le nombre total de caractères qui tiennent dans ces chaînes, et non sur le nombre d’octets.