バインディング情報の解釈
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 が 2 番目のパラメーターとして RpcStringBindingParse に渡されたことに注意してください。 これにより、その関数はオブジェクト UUID の解析をスキップします。 UUID は解析されないため、 RpcStringBindingParse はそれに文字列を割り当てません。 この手法を使用すると、解析と分析に関心のある情報に対してのみメモリを割り当てることができます。