次の方法で共有


暗黙的なバインド ハンドル

暗黙的バインディング ハンドルを使用すると、アプリケーションは特定のサーバーを選択してリモート プロシージャ 呼び出しを実行できます。 詳細については、「 クライアント側のバインド」を参照してください。 また、クライアント/サーバー プログラムで認証されたバインドを使用することもできます。 つまり、クライアントは暗黙的なバインド ハンドルで認証情報を指定できます。 RPC ランタイム ライブラリは、認証情報を使用して、クライアントとサーバー間の認証済み RPC セッションを確立します。 詳細については、セキュリティに関するページをご覧ください。

Note

暗黙的なバインド ハンドルはスレッド セーフではありません。 したがって、マルチスレッド アプリケーションでは、暗黙的なバインド ハンドルの使用を避ける必要があります。

 

アプリケーションで暗黙的なバインドを使用する場合、クライアントはバインディングを作成できるようにバインディング情報を設定する必要があります。 クライアントは、暗黙的なバインディングを作成した後、リモート プロシージャにバインド ハンドルを渡す必要はありません。 RPC ライブラリは、通信セッションの残りのメカニズムを処理します。

クライアントは、暗黙的ハンドルのバインド情報をグローバル変数に格納します。 MIDL コンパイラは、MIDL ファイルのインターフェイス仕様からクライアント スタブとヘッダー ファイルを生成すると、グローバル バインディング ハンドル変数のコードも生成します。 クライアント プログラムはハンドルを初期化した後、バインドを破棄するまでハンドルを再度参照しません。

暗黙的なハンドルを作成するには、次のようにインターフェイスの ACF で [implicit_handle] 属性を指定します。

/* ACF file (complete) */
 
[
  implicit_handle(handle_t hHello)
]
interface hello
{
}

前の例で使用した handle_t 型は、バインド ハンドルの定義に使用される MIDL データ型です。

暗黙的なハンドルを作成した後、アプリケーションはそれを RPC ランタイム ライブラリ関数のパラメーターとして使用する必要があります。 リモート プロシージャ呼び出しのパラメーターとして暗黙的ハンドルを使用しないでください。 次のコード サンプルは、暗黙的なバインド ハンドルの使用を示しています。

RPC_STATUS status;
status = RpcBindingFromStringBinding(
            pszStringBinding,
            &hHello);
 
status = MyRemoteProcedure();
 
status = RpcBindingFree(hHello);
...

前の例では、RPC ランタイム ライブラリ関数 RpcBindingFromStringBindingRpcBindingFree の両方で、パラメーター リストに暗黙的なバインド ハンドルを渡す必要があります。 ただし、リモート プロシージャ MyRemoteProcedure は RPC ランタイム ライブラリ関数ではありません。