次の方法で共有


RpcEpRegisterNoReplaceA 関数 (rpcdce.h)

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

構文

RPC_STATUS RpcEpRegisterNoReplaceA(
  RPC_IF_HANDLE      IfSpec,
  RPC_BINDING_VECTOR *BindingVector,
  UUID_VECTOR        *UuidVector,
  RPC_CSTR           Annotation
);

パラメーター

IfSpec

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

BindingVector

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

UuidVector

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

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

Annotation

ローカル エンドポイント マップ データベースに追加された各製品間要素に適用される文字列コメントへのポインター。 文字列は、null 終端文字を含め、最大 64 文字まで指定できます。 注釈文字列がない場合は、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を呼び出さずにサーバー インスタンス 実行が停止するたびに古いデータが蓄積されます。 古いエントリにより、クライアントが存在しないサーバーにエンドポイントを受信する可能性が高くなります。 クライアントは、別のエンドポイントを取得する前に、存在しないサーバーとの通信を試みるために時間を費やします。

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

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

  • RpcServerUseAllProtseqs を する
  • RpcServerUseProtseq の
  • RpcServerUseProtseqEp の
  • RpcServerUseAllProtseqsIf
  • RpcServerUseProtseqIf を する
サーバーもネーム サービス データベースにエクスポートする場合、サーバーは同じ IfSpecBindingVectorおよび RpcNsBindingExport 関数の呼び出し時に使用される UuidVector 値を使用して、RpcEpRegister 呼び出します。

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

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

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

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー rpcdce.h (Rpc.h を含む)
ライブラリ Rpcrt4.lib
DLL Rpcrt4.dll

関連項目

RpcBindingFromStringBinding

RpcEpRegister の

RpcEpUnregister を する

RpcNsBindingExport の

RpcServerInqBindings の

RpcServerUseAllProtseqs を する

RpcServerUseAllProtseqsIf

RpcServerUseProtseq の

RpcServerUseProtseqEp の

RpcServerUseProtseqIf を する