ponteiros Top-Level e inseridos

Para entender como os ponteiros e seus elementos de dados associados são alocados no Microsoft RPC, você precisa diferenciar entre ponteiros de nível superior e ponteiros inseridos. Também é útil fazer referência ao conjunto de todos os ponteiros que não são ponteiros de nível superior.

Ponteiros de nível superior são aqueles especificados como os nomes dos parâmetros em protótipos de função. Ponteiros de nível superior e seus referenciantes são sempre alocados no servidor.

Ponteiros inseridos são ponteiros inseridos em estruturas de dados, como matrizes, estruturas e uniões. Quando ponteiros inseridos gravam apenas a saída em um buffer e são nulos na entrada, o aplicativo do servidor pode alterar seus valores para não nulos. Nesse caso, os stubs do cliente alocam nova memória para esses dados.

Se o ponteiro inserido não for nulo no cliente antes da chamada, os stubs não alocarão memória no cliente no retorno. Em vez disso, os stubs tentam gravar a memória associada ao ponteiro inserido na memória existente no cliente associado a esse ponteiro, substituindo os dados já existentes.

Observação

Para dados lidos ou gravados em um buffer e que não especificam o tamanho do buffer, o comprimento da saída deve ser menor ou igual ao comprimento de entrada. Uma exceção RPC é gerada quando o estouro é detectado. Para dados de cadeia de caracteres, o comprimento da saída é determinado pela verificação do comprimento da cadeia de caracteres de entrada. Portanto, as cadeias de caracteres de saída não podem exceder o comprimento das cadeias de caracteres de entrada. As diretrizes de práticas recomendadas são evitar isso sempre incluindo um parâmetro especificado por tamanho para indicar o tamanho do buffer.

 

Ponteiros somente gravação inseridos são discutidos em Combinando atributos de ponteiro e direcional.

O termo ponteiros de nível sem escala refere-se a todos os ponteiros que não são especificados como nomes de parâmetro no protótipo de função, incluindo ponteiros inseridos e vários níveis de ponteiros aninhados.