解释绑定信息
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 不会为其分配字符串。 此技术使应用程序只能为感兴趣的分析和分析信息分配内存。