RpcEpRegisterNoReplaceW 関数 (rpcdce.h)

RpcEpRegisterNoReplace 関数は、ローカル エンドポイント マップ データベースにサーバー アドレス情報を追加します。

構文

RPC_STATUS RpcEpRegisterNoReplaceW(
  RPC_IF_HANDLE      IfSpec,
  RPC_BINDING_VECTOR *BindingVector,
  UUID_VECTOR        *UuidVector,
  RPC_WSTR           Annotation
);

パラメーター

IfSpec

ローカル エンドポイント マップ データベースに登録するためのインターフェイス。

BindingVector

サーバーがリモート プロシージャ 呼び出しを受信できるバインディング ハンドルのベクターへのポインター。

UuidVector

サーバーによって提供されるオブジェクト UUID のベクターへのポインター。 サーバー アプリケーションは、このベクターを構築します。

null パラメーター値は、登録するオブジェクト UUID がないことを示します。

Annotation

ローカル エンドポイント マップ データベースに追加された各製品間要素に適用される文字列コメントへのポインター。 文字列の長さを最大 64 文字にできます(null 終端文字を含む)。 注釈文字列がない場合は、null 値または null で終わる文字列 ("\0") を指定します。

注釈文字列は、情報のためだけにアプリケーションによって使用されます。 RPC では、クライアントが通信するサーバー インスタンスを特定したり、エンドポイント マップ データベース内の要素を列挙したりするために、この文字列は使用されません。

戻り値

意味
RPC_S_OK
呼び出しは成功しました。
RPC_S_NO_BINDINGS
バインドなし。
RPC_S_INVALID_BINDING
バインド ハンドルが無効です。
RPC_S_WRONG_KIND_OF_BINDING
これは、操作のバインドの種類が間違っていました。
 
メモ 有効なエラー コードの一覧については、「 RPC 戻り値」を参照してください。
 

注釈

RpcEpRegisterNoReplace 関数は、ローカル ホストのエンドポイント マップ データベースにエントリを追加します。 この関数は、既存のデータベース エントリを置き換えません。

サーバーの複数のインスタンスが同じホスト上で実行される場合、サーバーは RpcEpRegister ではなく RpcEpRegisterNoReplace を使用します。 つまり、複数のサーバー インスタンスが同じインターフェイス UUID、オブジェクト UUID、プロトコル シーケンスを一度に提供する場合は、この関数を使用します。

RpcEpRegisterNoReplace を呼び出すときにエントリが置き換えられるわけではないため、サーバーは実行を停止する前に登録を解除する必要があります。 それ以外の場合、 RpcEpUnregister を呼び出さずにサーバー インスタンスの実行が停止するたびに、古いデータが蓄積されます。 古いエントリを使用すると、クライアントが存在しないサーバーにエンドポイントを受信する可能性が高くなります。 クライアントは、別のエンドポイントを取得する前に、存在しないサーバーとの通信を試みるために時間を費やします。

サーバーは 、RpcEpRegisterRpcEpRegisterNoReplace を使用して、エンドポイント マッパー データベースにエントリを登録できます。 Windows 2000 より前のバージョンでは、実行されなくなった以前のサーバー インスタンスから残されたエンドポイント マッパー データベースの古いエントリをサーバーが上書きできるようにするために、2 つの関数を使用できます。 エンドポイント マッパー データベースは、サーバーが機能を停止するとすぐに、サーバー インスタンスによって登録されたエントリを自動的に削除します。 ただし、サーバーは、セキュリティ上の目的で別のサーバーのエンドポイント マッパー エントリを置き換えることはできません。 そのため、 RpcEpRegisterRpcEpRegisterNoReplace は、ほぼ同じ機能を実行します。

サーバー アプリケーションは RpcEpRegister を呼び出して、次のいずれかの関数を呼び出して指定されたエンドポイントを登録します。

サーバーもネーム サービス データベースにエクスポートする場合、サーバーは RpcNsBindingExport 関数の呼び出し時に使用される IfSpecBindingVectorUuidVector の値と同じ RpcEpRegister を呼び出します。

エンドポイントを指定せずにプロトコル シーケンスを使用すると、RPC ランタイム ライブラリによって動的エンドポイントが自動的に生成されます。 この場合、サーバーは RpcServerInqBindings を呼び出し、その後 に RpcEpRegisterNoReplace を呼び出して、それ自体を複数のクライアントで使用できるようにします。 それ以外の場合、自動的に開始されたサーバーは、サーバーが開始されたクライアントにのみ認識されます。

エンドポイント マップ データベースに追加される各要素には、次のものが論理的に含まれます。

  • インターフェイス UUID
  • インターフェイスのバージョン (メジャーとマイナー)
  • バインド ハンドル
  • オブジェクト UUID (省略可能)
  • 注釈 (省略可能)
RpcEpRegisterNoReplace、IfSpecBindingVectorUuidVector の各パラメーターからクロス積を作成し、クロス製品の各要素をエンドポイント マップ データベース内の個別の登録として追加します。

注意

rpcdce.h ヘッダーは、RPCEpRegisterNoReplace をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

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

こちらもご覧ください

RpcBindingFromStringBinding

RpcEpRegister

RpcEpUnregister

RpcNsBindingExport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf