RpcServerUseProtseqIfEx 関数 (rpcdce.h)

RpcServerUseProtseqIfEx 関数は、リモート プロシージャ 呼び出しを受信するために、指定されたプロトコル シーケンスとインターフェイス仕様のエンドポイントを組み合わせて使用するように RPC ランタイム ライブラリに指示します。

構文

RPC_STATUS RpcServerUseProtseqIfEx(
  RPC_CSTR      Protseq,
  unsigned int  MaxCalls,
  RPC_IF_HANDLE IfSpec,
  void          *SecurityDescriptor,
  PRPC_POLICY   Policy
);

パラメーター

Protseq

RPC ランタイム ライブラリに登録するプロトコル シーケンスの文字列識別子へのポインター。

MaxCalls

ncacn_ip_tcp プロトコル シーケンスのバックログ キューの長さ。 他のすべてのプロトコル シーケンスでは、このパラメーターは無視されます。 既定値を指定するには、RPC_C_PROTSEQ_MAX_REQS_DEFAULTを使用します。 「解説」を参照してください。

IfSpec

Protseq パラメーターで指定されたプロトコル シーケンスのバインドの作成に使用するエンドポイント情報を含むインターフェイス。

SecurityDescriptor

セキュリティ サブシステムに指定された省略可能なパラメーターへのポインター。 ncacn_npおよび ncalrpc プロトコル シーケンスにのみ使用されます。 他のすべてのプロトコル シーケンスでは、このパラメーターは無視されます。 サーバーをセキュリティで保護するために、エンドポイントでセキュリティ記述子を使用することはお勧めしません。 このパラメーターは、この API の DCE 仕様には表示されません。

Policy

動的ポートのポート割り当てを制限し、マルチホーム コンピューターがネットワーク インターフェイス カードに選択的にバインドできるようにするフラグを含む、 RPC_POLICY 構造体へのポインター。

戻り値

意味
RPC_S_OK
呼び出しは成功しました。
RPC_S_PROTSEQ_NOT_FOUND
このプロトコル シーケンスのエンドポイントが IDL ファイルに指定されていません。
RPC_S_PROTSEQ_NOT_SUPPORTED
プロトコル シーケンスは、このホストではサポートされていません。
RPC_S_INVALID_RPC_PROTSEQ
プロトコル シーケンスが無効です。
RPC_S_INVALID_ENDPOINT_FORMAT
エンドポイントの形式が無効です。
RPC_S_OUT_OF_MEMORY
システムがメモリ不足です。
RPC_S_INVALID_SECURITY_DESC
セキュリティ記述子が無効です。
 
メモ 有効なエラー コードの一覧については、「 RPC 戻り値」を参照してください。
 

注釈

RpcServerUseProtseqIfEx のパラメーターと効果により、RpcServerUseProtseqIf のパラメーターと効果が拡張されます。 違いは Policy パラメーターです 。これにより、動的ポートのポート割り当てを制限でき、マルチホーム コンピューターはネットワーク インターフェイス カードに選択的にバインドできます。

RPC_POLICY構造体の NICFlags フィールドを 0 に設定すると、この拡張 API は元の RpcServerUseProtseqIf と機能的に同等になり、サーバーはシステム レジストリの設定に基づいて NIC にバインドされます。 レジストリ設定で使用可能なインターネット ポートとイントラネット ポートを定義する方法については、「 ポート割り当てと選択的バインディング用のレジストリの構成」を参照してください。

メモ[ポリシー] フィールドのフラグ設定は、ncacn_ip_tcpまたはncadg_ip_udpプロトコル シーケンスが使用されている場合にのみ有効です。他のすべてのプロトコル シーケンスでは、RPC ランタイムはこれらの値を無視します。
 
サーバー アプリケーションは RpcServerUseProtseqIfEx を呼び出して、1 つのプロトコル シーケンスを RPC ランタイム ライブラリに登録します。 プロトコル シーケンスの登録ごとに、ルーチンには IDL ファイルで提供されるエンドポイント アドレス情報が含まれます。

リモート プロシージャ コール要求を受信するには、サーバーが少なくとも 1 つのプロトコル シーケンスを RPC ランタイム ライブラリに登録する必要があります。 サーバー アプリケーションは、このルーチンを複数回呼び出して、追加のプロトコル シーケンスを登録できます。

サーバーによって登録されたプロトコル シーケンスごとに、RPC ランタイム ライブラリは、サーバーがリモート プロシージャ コール要求を受信する 1 つ以上のエンドポイントを作成します。 RPC ランタイム ライブラリは、プロトコル シーケンスごとに異なるエンドポイントを作成します。 ただし、プロセス内の各インターフェイスには、任意のエンドポイントを介してアクセスできます。 詳細については、「セキュリティで保護された RPC クライアントまたはサーバーの作成」を参照してください。

MaxCalls の場合、アプリケーションによって提供される値はヒントにすぎません。 RPC ランタイムまたは Windows ソケット プロバイダーによって値がオーバーライドされる場合があります。 たとえば、Windows XP または Windows 2000 Professional では、値は 5 に制限されます。 5 より大きい値は無視され、代わりに 5 が使用されます。 Windows Server 2003 および Windows 2000 Server では、値が受け入れられます。

アプリケーションは 、MaxCalls で適切な値を渡すように注意する必要があります。 Server、Advanced Server、または Datacenter Server の値が大きいと、大量の非ページ プール メモリが使用される可能性があります。 値が小さすぎると、バックログ キューが使い果たされた場合にサーバーから TCP RST によって TCP SYN パケットが満たされる可能性があるため、この値を使用しても好ましくない場合があります。 アプリケーション開発者は、 MaxCalls の適切な値を決定するときに、メモリ占有領域とスケーラビリティ要件のバランスを取る必要があります。

コンピューターが選択的バインディングを使用するように構成されている場合、正常な戻り値は、サーバーがコンピューター上に存在するすべてのネットワーク インターフェイスのエンドポイントを作成したことを保証しません。 RPC ランタイムは、選択的バインディング設定によっては、一部のネットワーク インターフェイスでリッスンしない場合があります。 さらに、インターフェイスがまだ DHCP を使用して IP アドレスを受信していない場合、RPC サーバーは DHCP アドレスが割り当てられるまでネットワーク インターフェイスでリッスンしません。 正常な戻り値は、サーバーが少なくとも 1 つのネットワーク インターフェイスでリッスンしていることを意味します。RpcServerInqBindings 関数の呼び出しを使用して、リモート プロシージャ呼び出しを受信できるバインド ハンドルの完全な一覧を取得できます。

IDL ファイルからすべてのプロトコル シーケンスを登録するために、サーバーは RpcServerUseAllProtseqsIfEx を呼び出します。 詳細については、「 サーバー側のバインド」を参照してください。 Microsoft RPC でサポートされるプロトコル シーケンスの一覧については、「 文字列バインディング」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー rpcdce.h (Rpc.h を含む)
Library Rpcrt4.lib
[DLL] Rpcrt4.dll

こちらもご覧ください

RpcServerUseAllProtseqsEx

RpcServerUseAllProtseqsIfEx

RpcServerUseProtseqEpEx

RpcServerUseProtseqEx

セキュリティで保護された RPC クライアントまたはサーバーの作成