RpcServerUseAllProtseqsIfEx 関数 (rpcdce.h)

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

構文

RPC_STATUS RpcServerUseAllProtseqsIfEx(
  unsigned int  MaxCalls,
  RPC_IF_HANDLE IfSpec,
  void          *SecurityDescriptor,
  PRPC_POLICY   Policy
);

パラメーター

MaxCalls

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

IfSpec

バインディング ハンドルの作成に使用するプロトコル シーケンスと対応するエンドポイント情報を含むインターフェイス。

SecurityDescriptor

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

Policy

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

戻り値

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

注釈

メモ サポートされているすべてのプロトコル シーケンスをリッスンすることは推奨されません。これは、サーバーが非メインストリーム プロトコル シーケンスを含むすべてのプロトコル シーケンスでリッスンするためです。 サーバーはメイン ストリーム プロトコル シーケンスでのみリッスンすることをお勧めします。
 
RpcServerUseAllProtseqsIfEx のパラメーターと効果は、RpcServerUseAllProtseqsIf のパラメーターと効果です。 違いは、動的ポートのポート割り当てを制限し、マルチホーム マシンがネットワーク インターフェイス カードに選択的にバインドできるようにする Policy フィールドです。

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

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

リモート プロシージャ コール要求を受信するには、サーバーが少なくとも 1 つのプロトコル シーケンスを RPC ランタイム ライブラリに登録する必要があります。 サーバーによって登録されたプロトコル シーケンスごとに、RPC ランタイム ライブラリは、サーバーがリモート プロシージャ コール要求を受信する 1 つ以上のエンドポイントを作成します。 RPC ランタイム ライブラリは、プロトコル シーケンスごとに異なるエンドポイントを作成します。

メモRpcServerUseAllProtseqsIfEx 関数を使用しても、サーバーは次のプロトコル シーケンスをリッスンしません。
 
メモ これらのプロトコル シーケンスのいずれかをリッスンするには、各シーケンスを個別に選択する必要があります。
 
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 ファイルで指定された選択したプロトコル シーケンスを登録するために、サーバーは RpcServerUseProtseqIfEx を呼び出します。 詳細については、「 サーバー側のバインド」を参照してください。

要件

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

こちらもご覧ください

RpcServerUseAllProtseqsEx

RpcServerUseProtseqEpEx

RpcServerUseProtseqEx

RpcServerUseProtseqIfEx