文字列バインディング
文字列バインディングは、バインド オブジェクト UUID、RPC プロトコル シーケンス、ネットワーク アドレス、エンドポイントとエンドポイントのオプションを表す文字列で構成される符号なし文字列です。
ObjectUUID@ProtocolSequence:NetworkAddress[Endpoint,Option]
パラメーター
-
ObjectUUID
-
リモート プロシージャ コールによって操作されるオブジェクトの UUID。 サーバーでは、RPC ランタイム ライブラリは、オブジェクトの種類をマネージャー エントリ ポイント ベクター (関数ポインターの配列) にマップして、正しいマネージャー ルーチンを呼び出します。 オブジェクト UUID をマネージャー エントリ ポイント ベクトルにマップする方法については、「 インターフェイスの登録」を参照してください。
-
ProtocolSequence
-
RPC プロトコル (ncacn など)、トランスポート プロトコル (TCP など)、ネットワーク プロトコル (IP など) の有効な組み合わせを表す文字列。 Microsoft RPC では、プロトコル シーケンス定数で指定されている次の プロトコルがサポートされています。
-
NetworkAddress
-
リモート プロシージャ コールを受信するシステムのネットワーク アドレス。
Note
次のプロトコル シーケンスは、Windows XP の時点ではサポートされていません。
ネットワーク アドレスの形式と内容は、次のように指定されたプロトコル シーケンスによって異なります。
プロトコル シーケンス ネットワーク アドレス 例 ncacn_nb_tcp コンピューター名 Myserver ncacn_nb_ipx コンピューター名 Myserver ncacn_nb_nb コンピューター名 Myserver ncacn_ip_tcp 4 オクテットのインターネット アドレス、またはホスト名。 IPv6 ネットワーク スタックがインストールされている場合、IPv6 は完全にサポートされ、IPv6 アドレスも受け入れられます。 128.10.2.30 anynode.microsoft.com ncacn_np サーバー名 (先頭の二重円記号は省略可能) myserver \\myotherserver ncacn_spx IPX インターネット アドレスまたはサーバー名 ~0000000108002B30612C myserver ncacn_dnet_nsp エリアとノードの構文 4.120 ncacn_at_dsp コンピューター名。必要に応じて@ と AppleTalk ゾーン名が続きます。 ゾーンが指定されていない場合は、クライアントのゾーンである @*が既定値になります。 サーバー名のservername@zonename ncacn_vns_spp フォームの StreetTalk サーバー名item@group@organization printserver@sdkdocs@microsoft ncadg_mq サーバー名 Myserver ncacn_http インターネット アドレス (4 オクテット名またはフレンドリ名、またはローカル サーバー名 128.10.2.30 somesvr@anywhere.com mylocalsvr ncadg_ip_udp 4 オクテット インターネット アドレスまたはホスト名 128.10.2.30 anynode.microsoft.com ncadg_ipx IPX インターネット アドレスまたはサーバー名 ~0000000108002B30612C myserver ncalrpc コンピューター名 thismachine ネットワーク アドレス フィールドは省略可能です。 ネットワーク アドレスを指定しない場合、文字列バインディングはローカル ホストを参照します。 ncalrpc プロトコル シーケンスを使用する場合はローカル コンピューターの名前を指定できますが、これを行う必要はまったくありません。
-
エンドポイント
-
リモート プロシージャ 呼び出しを受信するプロセスのエンドポイント (アドレス)。 エンドポイントの前には、キーワード (keyword) endpoint= を付けることができます。 サーバーがエンドポイント マッパーにバインドを登録している場合、エンドポイントの指定は省略可能です。 RpcEpRegister を参照してください。
エンドポイントの形式と内容は、次のエンドポイント/オプション テーブルに示すように、指定されたプロトコル シーケンスによって異なります。
-
オプション
-
プロトコル固有のオプション。 オプション フィールドは必須ではありません。 各オプションは、構文オプション=名オプション値を使用する {name, value} ペアによって指定されます。 オプションは、次の Endpoint/Option テーブルに示すように、プロトコル シーケンスごとに定義されます。
プロトコル シーケンス エンドポイント 例 オプション名 ncacn_nb_tcp 1 ~ 254 の整数。 0 ~ 32 の値の多くは、Microsoft によって予約されています。 100 なし ncacn_nb_ipx (上記のように) (上記のように) None ncacn_nb_nb (上記のように) (上記のように) None ncacn_ip_tcp インターネット ポート番号。 1025 None ncacn_np 名前付きパイプ。 名前は "\\pipe" で始まる必要があります。 \\pipe\\pipename セキュリティ ncacn_spx 1 ~ 65535 の整数。 5000 None ncacn_dnet_nsp DECnet フェーズ IV オブジェクト番号 (前に # 文字を付ける必要があります)、またはオブジェクト名。 mailserver #17 None ncacn_at_dsp 最大 22 バイトの長さの文字列。 myservicesendpoint None ncacn_vns_spp 250 から 511 の間のブドウの SPP ポート番号。 500 None ncadg_mq 1 ~ 65535 の整数。 5000 None ncacn_http インターネット ポート番号。 2215 HTTP および RPC プロキシ サーバー名、HttpConnection オプション ncadg_ip_udp インターネット ポート番号。 1025 None ncadg_ipx 1 ~ 65535 の整数。 5000 None ncalrpc アプリケーションまたはサービス名を指定する文字列。 文字列に円記号文字を含めることはできません。 my_printer セキュリティ ncacn_http プロトコル シーケンスでサポートされる HttpConnectionOption オプション名は、次の値を受け取ります。
オプション名 値 HttpConnectOption HttpProxy を使用する HttpConnectionOption を使用すると、HTTP 接続を行うときに RPC の動作を指示できます。 UseHttpProxy 値は、クライアントがインターネット エクスプローラーでインターネット オプションを設定してローカル アドレスのプロキシ サーバーをバイパスする場合など、常に HTTP プロキシ経由でトラフィックをルーティングするように RPC に指示します。 このオプションを選択すると、クライアントは Http プロキシを介して RPC プロキシに強制的に接続します。 これにより、HTTP プロキシを使用する前に RPC サーバーを直接検索する遅延がバイパスされるため、接続を確立する時間が短縮されます。
この HttpConnectionOption オプションを使用し、クライアント上のインターネット エクスプローラーがその Http プロキシを使用するように構成されていない場合、接続がRPC_S_INVALID_NETWORK_OPTIONSで失敗する可能性があります。
HttpConnectOption=UseHttpProxy
HttpConnectionOption の詳細については、「HTTP を RPC トランスポートとして使用する」を参照してください。
ncalrpc、ncacn_np、ncadg_ip_udp、およびプロトコル シーケンスでサポートされる セキュリティ オプション名 ncadg_ipxは、次のオプション値を受け取ります。
オプション名 オプション値 Security {identification | anonymous | impersonation}{dynamic | static}{true | false} セキュリティー・オプション名を指定する場合は、セキュリティー・オプション値の各セットから 1 つの項目も指定する必要があります。 オプション値は、単一スペース文字で区切る必要があります。 たとえば、次の Option フィールドは有効です。
Security=identification dynamic true Security=impersonation static true
セキュリティ オプションの値には、次の意味があります。
セキュリティ オプションの値 説明 匿名 クライアントはサーバーに対して匿名です。 動的 クライアント セキュリティ ID の変更は、サーバーがトランスポート セキュリティを使用するときにサーバーによって表示されます。 これは、LRPC (ncalrpc) トランスポート レベルのセキュリティと、ローカルの名前付きパイプ (ncacn_np) トランスポート レベルのセキュリティの既定のモードです。 False 有効 = FALSE。OFF に設定されているものを含むすべてのトークン特権設定は、サーバー上のトークンに含まれ、サーバーで有効にすることができます。 特権は、同じコンピューターの RPC 呼び出しにのみ関連します。 [識別] サーバーにはクライアントに関する情報がありますが、偽装することはできません。 偽装 サーバーは、ローカル システム内のクライアントに代わって動作できます (トランスポート レベルのセキュリティでは委任はサポートされていません)。 静的 サーバーがトランスポート セキュリティを使用している場合、クライアント セキュリティ ID の変更はサーバーによって表示されません。 これは、リモートの名前付きパイプ (ncacn_np) トランスポート レベルのセキュリティで使用できる唯一のモードです。 呼び出し元の ID は、バインド ハンドルが作成された時点ではなく、そのバインド ハンドルの最初のリモート プロシージャ 呼び出し中に保存されます。 True 有効 = TRUE。ON に設定されているトークン特権設定のみが、サーバー上のトークンに含まれます。 このオプションを使用する場合、サーバーは OFF に設定された特権を有効にできません。 特権は、同じコンピューターの RPC 呼び出しにのみ関連します。 セキュリティ オプションの詳細については、「セキュリティ」を 参照してください。
解説
Option 構文で必要な場合を除き、文字列バインドでは空白は使用できません。 NetworkAddress、Endpoint、Option フィールドの既定の設定は、ProtocolSequence メンバーの値によって異なります。
すべての文字列バインディング フィールドで、1 つの円記号文字 (\) がエスケープ文字として解釈されます。 1 つのリテラル円記号文字を指定するには、2 つの円記号 (\\) を指定する必要があります。
文字列バインディングには、バインド ハンドルの文字表現と、バインディング ハンドルの一部が含まれる場合があります。 文字列バインディングは、バインド ハンドルの一部を表す場合に便利ですが、リモート プロシージャ 呼び出しを行うために使用することはできません。 まず 、RpcBindingFromStringBinding を呼び出してバインド ハンドルに変換する必要があります。
さらに、文字列バインディングには、バインド ハンドルのすべての情報が含まれているわけではありません。 たとえば、バインド ハンドルに関連付けられている認証情報がある場合、 RpcBindingToStringBinding を呼び出して返される文字列バインディングには変換されません。
分散アプリケーションの開発中、サーバーは、エンドポイント マップ データベースまたはネーム サービス データベースを使用せずに、文字列バインディングを使用してクライアントにバインド情報を通信し、クライアントとサーバーの関係を確立できます。 このようなリレーションシップを確立するには、 関数 RpcBindingToStringBinding を 使用して、1 つ以上のバインド ハンドルをバインド ハンドル ベクターから文字列バインドに変換し、文字列バインディングをクライアントに提供します。
例
有効な文字列バインディングの例を次に示します。 これらの例では、文字列形式で有効な UUID を表すために便利に obj-uuid を使用します。 UUID 308FB580-1EB2-11CA-923B-08002B1075A7 を示す代わりに、 例は obj-uuid を示しています。
obj-uuid@ncadg_mq:mymqserver
obj-uuid@ncacn_http:major7.microsoft.com[2225]
obj_uuid@ncacn_http:major7.microsoft.com[,HttpProxy=proxysvr:80,
RpcProxy=websvr1.microsoft.com:80]
obj_uuid@ncacn_http:major7.microsoft.com[,HttpProxy=proxysvr:80,
RpcProxy=websvr1.microsoft.com:80,HttpConnectOption=UseHttpProxy]
obj-uuid@ncacn_ip_tcp:16.20.16.27[2001]
obj-uuid@ncacn_ip_tcp:16.20.16.27[endpoint=2001]
obj-uuid@ncacn_nb_nb:
obj-uuid@ncacn_nb_nb:[100]
obj-uuid@ncacn_np:
obj-uuid@ncacn_np:[\\pipe\\p3,Security=impersonation static true]
obj-uuid@ncacn_np:\\\\marketing[\\pipe\\p2\\p3\\p4]
obj-uuid@ncacn_np:\\\\marketing[endpoint=\\pipe\\p2\\p3\\p4]
obj-uuid@ncacn_np:\\\\sales
obj-uuid@ncacn_np:\\\\sales[\\pipe\\p1,Security=identification dynamic true]
obj-uuid@ncalrpc:
obj-uuid@ncalrpc:[object1_name_demonstrating_that_these_can_be_lengthy]
obj-uuid@ncalrpc:[object2_name,Security=anonymous static true]
obj-uuid@ncacn_vns_spp:server@group@org[500]
obj-uuid@ncacn_dnet_nsp:took[elf_server]
obj-uuid@ncacn_dnet_nsp:took[endpoint=elf_server]
obj-uuid@ncadg_ip_udp:128.10.2.30
obj-uuid@ncadg_ip_udp:maryos.microsoft.com[1025]
obj-uuid@ncadg_ipx: ~0000000108002B30612C[5000]
obj-uuid@ncadg_ipx:printserver
obj-uuid@ncacn_spx:annaw[4390]
obj-uuid@ncacn_spx:~0000000108002B30612C