Поделиться через


Интерпретация сведений о привязке

Microsoft RPC позволяет клиентским и серверным программам получать доступ к данным и интерпретировать их в дескрипторове привязки. Это не означает, что вы можете или должны пытаться получить доступ к содержимому дескриптора привязки напрямую. Microsoft RPC предоставляет функции, которые задают и извлекают информацию в дескрипторах привязки.

Чтобы получить сведения в дескрипторов привязки, передайте дескриптор в RpcBindingToStringBinding. Он возвращает сведения о привязке в виде строки. Для каждого вызова RpcBindingToStringBinding необходимо наличие соответствующего вызова функции RpcStringFree.

Можно вызвать функцию RpcStringBindingParse , чтобы проанализировать строку, полученную из RpcBindingToStringBinding. Эта функция выделяет строки для хранения анализируемой информации. Если вы не хотите анализировать определенный фрагмент сведений о привязке, передайте значение NULL в качестве значения этого параметра. Обязательно вызовите RpcStringFree для каждой из выделенных строк.

В следующем фрагменте кода показано, как приложение может вызывать эти функции.

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.

Предыдущий пример кода вызывает функции RpcBindingToStringBinding и RpcStringBindingParse для получения и анализа информации в допустимом дескрипторе привязки. Обратите внимание, что значение NULL было передано в качестве второго параметра в RpcStringBindingParse. Это приводит к тому, что функция пропускает синтаксический анализ объекта UUID. Так как он не анализирует UUID, RpcStringBindingParse не выделит для него строку. Этот метод позволяет приложению выделять память только для информации, необходимой для анализа и анализа.