Interpretando informações de associação

O Microsoft RPC permite que seus programas cliente e servidor acessem e interpretem as informações em um identificador de associação. Isso não significa que você pode ou deve tentar acessar o conteúdo de um identificador de associação diretamente. O Microsoft RPC fornece funções que definem e recuperam as informações em identificadores de associação.

Para obter as informações em um identificador de associação, passe o identificador para RpcBindingToStringBinding. Ele retorna as informações de associação como uma cadeia de caracteres. Para cada chamada para RpcBindingToStringBinding, você deve ter uma chamada correspondente para a função RpcStringFree.

Você pode chamar a função RpcStringBindingParse para analisar a cadeia de caracteres obtida de RpcBindingToStringBinding. Essa função aloca cadeias de caracteres para conter as informações que analisa. Se você não quiser que ele analise uma determinada parte das informações de associação, passe um NULL como o valor desse parâmetro. Certifique-se de chamar RpcStringFree para cada uma das cadeias de caracteres alocadas.

O fragmento de código a seguir ilustra como um aplicativo pode chamar essas funções.

RPC_STATUS status;
UCHAR *lpzStringBinding;
UCHAR *lpzProtocolSequence;
UCHAR *lpzNetworkAddress;
UCHAR *lpzEndpoint;
UCHAR *NetworkOptions;
 
// The variable hBindingHandle is a valid binding handle.
 
status = RpcBindingToStringBinding(hBindingHandle,&lpzStringBinding);
// Code to check the status goes here.
 
status = RpcStringBindingParse(
    lpzStringBinding,
    NULL,
    &lpzProtocolSequence;
    &lpzNetworkAddress;
    &lpzEndpoint;
    &NetworkOptions);
// Code to check the status goes here.
 
// Code to analyze and alter the binding information in the strings
// goes here.
 
status = RpcStringFree(&lpzStringBinding);
// Code to check the status goes here.
 
status = RpcStringFree(&lpzProtocolSequence);
// Code to check the status goes here.
 
status = RpcStringFree(&lpzNetworkAddress);
// Code to check the status goes here.
 
status = RpcStringFree(&NetworkOptions);
// Code to check the status goes here.

O código de exemplo anterior chama as funções RpcBindingToStringBinding e RpcStringBindingParse para obter e analisar as informações em um identificador de associação válido. Observe que o valor NULL foi passado como o segundo parâmetro para RpcStringBindingParse. Isso faz com que essa função ignore a análise do objeto UUID. Como ele não analisa o UUID, RpcStringBindingParse não alocará uma cadeia de caracteres para ele. Essa técnica permite que seu aplicativo aloque apenas memória para as informações que você está interessado em analisar e analisar.