RpcServerRegisterIfEx 関数 (rpcdce.h)

RpcServerRegisterIfEx 関数は、RPC ランタイム ライブラリにインターフェイスを登録します。

構文

RPC_STATUS RpcServerRegisterIfEx(
  RPC_IF_HANDLE      IfSpec,
  UUID               *MgrTypeUuid,
  RPC_MGR_EPV        *MgrEpv,
  unsigned int       Flags,
  unsigned int       MaxCalls,
  RPC_IF_CALLBACK_FN *IfCallback
);

パラメーター

IfSpec

登録するインターフェイスを示す MIDL で生成された構造体。

MgrTypeUuid

MgrEpv パラメーターに関連付ける UUID 型へのポインター。 null パラメーター値 (または nil UUID) を指定すると、IfSpec が nil 型 UUID に登録されます。

MgrEpv

マネージャー ルーチンのエントリ ポイント ベクター (EPV)。 MIDL で生成された既定の EPV を使用するには、 null 値を指定します。 詳細については、「 RPC_MGR_EPV」を参照してください。

Flags

フラグ。 フラグ値の一覧については、「 インターフェイス登録フラグ」を参照してください。

MaxCalls

自動リッスン インターフェイスでサーバーが受け入れられる同時リモート プロシージャ コール要求の最大数。 MaxCalls パラメーターは自動リッスン インターフェイスでのみ適用でき、自動リッスンではないインターフェイスでは無視されます。 RPC ランタイム ライブラリは、 MaxCalls で指定された呼び出しの数よりも多くの同時呼び出し要求がサーバーで許可されないように最善を尽くします。 実際の数は大きくすることができ、プロトコル シーケンスごとに異なる場合があります。

他のインターフェイスでの呼び出しは、RpcServerListen 関数呼び出しで指定されたプロセス全体の MaxCalls パラメーターの値によって制御されます。

同時呼び出しの数が問題にならない場合は、RPC_C_LISTEN_MAX_CALLS_DEFAULTを使用して既定値を指定することで、サーバー側のパフォーマンスを若干向上させることができます。 これにより、RPC ランタイム環境で不要な制限が適用されなくなります。

IfCallback

セキュリティ コールバック関数。コールバックがない場合は NULL 。 登録されている各インターフェイスには、異なるコールバック関数を使用できます。 詳細については、「解説」を参照してください。

戻り値

成功時にRPC_S_OKを返します。

メモ 有効なエラー コードの一覧については、「 RPC 戻り値」を参照してください。
 

注釈

RpcServerRegisterIfEx のパラメーターと効果は、RpcServerRegisterIf のパラメーターと効果をサブボリュームに含めます。 違いは、自動リッスン インターフェイスを登録し、セキュリティ コールバック関数を指定できることです。

サーバー アプリケーション コードは 、RpcServerRegisterIfEx を呼び出してインターフェイスを登録します。 インターフェイスを登録するために、サーバーは次の情報を提供します。

  • インターフェイスの仕様

    インターフェイス仕様は、MIDL コンパイラによって生成されるデータ構造です。

  • マネージャーの種類 UUID とマネージャー EPV

    マネージャーの種類は UUID で、マネージャー EPV は、サーバーがクライアントからリモート プロシージャ コール要求を受信したときに実行されるマネージャー ルーチンを決定します。 サーバーによって提供されるインターフェイスの実装ごとに、個別のマネージャー EPV を登録する必要があります。

    nil 以外のマネージャー型 UUID を指定する場合、サーバーは RpcObjectSetType を呼び出して、この nil 以外の型のオブジェクトを登録する必要があることに注意してください。

RPC_IF_AUTOLISTEN フラグを指定すると、インターフェイスが自動リッスン インターフェイスとしてマークされます。 ランタイムは、インターフェイスが登録されるとすぐに呼び出しのリッスンを開始し、インターフェイスの登録が解除されるとリッスンを停止します。 このインターフェイスの RpcServerUnregisterIf を呼び出すと、このインターフェイスで保留中のすべての呼び出しが完了するまで待機します。 RpcServerListenRpcMgmtStopServerListening の呼び出しは、インターフェイスに影響を与えることはなく、IfSpec == NULL を指定した RpcServerUnregisterIf の呼び出しにも影響しません。 これにより、DLL は、メイン アプリケーションの RPC 状態を変更せずに、RPC インターフェイスを登録したり、レジストリから削除したりできます。

セキュリティ コールバック関数を指定すると、サーバー アプリケーションはクライアントごとにインターフェイスへのアクセスを制限できます。 既定では、セキュリティは省略可能です。サーバーが RpcServerRegisterAuthInfo を呼び出した場合でも、サーバーのランタイムはセキュリティで保護されていない呼び出しをディスパッチします。 サーバーが認証されたクライアントのみを受け入れる場合、インターフェイス コールバック関数は RpcBindingInqAuthClient または RpcGetAuthorizationContextForClient 関数を呼び出してセキュリティ レベルを取得するか、 RpcImpersonateClient を使用してクライアントの偽装を試みる必要があります。 また、インターフェイス フラグで RPC_IF_ALLOW_SECURE_ONLY フラグを指定することもできます。

サーバー アプリケーションがインターフェイスのセキュリティ コールバック関数を指定すると、RPC ランタイムによって、そのインターフェイスに対する認証されていない呼び出しが自動的に拒否されます。 さらに、ランタイムは、各クライアントが使用したインターフェイスを記録します。 クライアントが現在の通信セッション中に使用していないインターフェイスに RPC を作成すると、RPC ランタイム ライブラリはインターフェイスのセキュリティ コールバック関数を呼び出します。 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH フラグを指定すると、認証されていないクライアントが自動的に拒否されなくなります。

コールバック関数のシグネチャについては、「 RPC_IF_CALLBACK_FN」を参照してください。

クライアントがこのインターフェイスでメソッドの呼び出しを許可されている場合、コールバック関数はRPC_S_OKを返す必要があります。 その他のリターン コードを使用すると、クライアントは例外RPC_S_ACCESS_DENIEDを受け取ります。

場合によっては、RPC ランタイムは、クライアントごとにインターフェイスごとにセキュリティ コールバック関数を複数回呼び出す場合があります。 コールバック関数でこの可能性を処理できることを確認してください。

要件

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

こちらもご覧ください

インターフェイスの登録

RpcBindingFromStringBinding

RpcBindingSetObject

RpcGetAuthorizationContextForClient

RpcNsBindingExport

RpcNsBindingImportBegin

RpcNsBindingLookupBegin

RpcObjectSetType

RpcServerRegisterIf

RpcServerRegisterIf2

RpcServerRegisterIf3

RpcServerUnregisterIf

RpcServerUnregisterIfEx