pointeurs Top-Level et incorporés

Pour comprendre comment les pointeurs et leurs éléments de données associés sont alloués dans Microsoft RPC, vous devez faire la différence entre les pointeurs de niveau supérieur et les pointeurs incorporés. Il est également utile de faire référence à l’ensemble de tous les pointeurs qui ne sont pas des pointeurs de niveau supérieur.

Les pointeurs de niveau supérieur sont ceux qui sont spécifiés comme noms de paramètres dans les prototypes de fonction. Les pointeurs de niveau supérieur et leurs références sont toujours alloués sur le serveur.

Les pointeurs incorporés sont des pointeurs incorporés dans des structures de données telles que des tableaux, des structures et des unions. Lorsque les pointeurs incorporés écrivent uniquement la sortie dans une mémoire tampon et qu’ils ont la valeur Null en entrée, l’application serveur peut modifier leurs valeurs sur non null. Dans ce cas, les stubs clients allouent une nouvelle mémoire pour ces données.

Si le pointeur incorporé n’est pas null sur le client avant l’appel, les stubs n’allouent pas de mémoire sur le client au retour. Au lieu de cela, les stubs tentent d’écrire la mémoire associée au pointeur incorporé dans la mémoire existante sur le client associé à ce pointeur, en remplaçant les données qui y sont déjà.

Notes

Pour les données lues à partir d’une mémoire tampon ou qu’elles sont lues dans une mémoire tampon et qui ne spécifient pas la taille de la mémoire tampon, la longueur de sortie doit être inférieure ou égale à la longueur d’entrée. Une exception RPC est déclenchée quand un dépassement de capacité est détecté. Pour les données de chaîne, la longueur de sortie est déterminée en vérifiant la longueur de la chaîne d’entrée. Par conséquent, les chaînes de sortie ne peuvent pas dépasser la longueur des chaînes d’entrée. Il est recommandé d’éviter cela en incluant toujours un paramètre de taille spécifié pour indiquer la taille de la mémoire tampon.

 

Les pointeurs en écriture seule incorporés sont décrits dans Combinaison de pointeurs et d’attributs directionnels.

Le terme pointeurs de niveau supérieur fait référence à tous les pointeurs qui ne sont pas spécifiés en tant que noms de paramètres dans le prototype de fonction, y compris les pointeurs incorporés et plusieurs niveaux de pointeurs imbriqués.