Compartir a través de


Top-Level y punteros incrustados

Para comprender cómo se asignan punteros y sus elementos de datos asociados en RPC de Microsoft, debe diferenciar entre punteros de nivel superior y punteros incrustados. También es útil hacer referencia al conjunto de todos los punteros que no son punteros de nivel superior.

Los punteros de nivel superior son aquellos que se especifican como nombres de parámetros en prototipos de función. Los punteros de nivel superior y sus referentes siempre se asignan en el servidor.

Los punteros incrustados son punteros incrustados en estructuras de datos como matrices, estructuras y uniones. Cuando los punteros incrustados solo escriben la salida en un búfer y son null en la entrada, la aplicación de servidor puede cambiar sus valores a no NULL. En este caso, los códigos auxiliares de cliente asignan memoria nueva para estos datos.

Si el puntero incrustado no es null en el cliente antes de la llamada, los códigos auxiliares no asignan memoria en el cliente al devolverlo. En su lugar, los códigos auxiliares intentan escribir la memoria asociada con el puntero incrustado en la memoria existente en el cliente asociado a ese puntero, sobrescribiendo los datos ya allí.

Nota

Para los datos leídos o escritos en un búfer y que no especifican el tamaño del búfer, la longitud de salida debe ser menor o igual que la longitud de entrada. Cuando se detecta desbordamiento, se genera una excepción RPC. Para los datos de cadena, la longitud de salida se determina comprobando la longitud de la cadena de entrada. Por lo tanto, las cadenas de salida no pueden superar la longitud de las cadenas de entrada. Las instrucciones de procedimientos recomendados son evitarlo siempre incluyendo un parámetro especificado por el tamaño para indicar el tamaño del búfer.

 

Los punteros de solo escritura incrustados se describen en Combinación de punteros y atributos direccionales.

El término punteros de nivel no superior hace referencia a todos los punteros que no se especifican como nombres de parámetro en el prototipo de función, incluidos los punteros incrustados y varios niveles de punteros anidados.