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を返します。
注釈
RpcServerRegisterIfEx のパラメーターと効果は、RpcServerRegisterIf のパラメーターと効果をサブボリュームに含めます。 違いは、自動リッスン インターフェイスを登録し、セキュリティ コールバック関数を指定できることです。
サーバー アプリケーション コードは 、RpcServerRegisterIfEx を呼び出してインターフェイスを登録します。 インターフェイスを登録するために、サーバーは次の情報を提供します。
- インターフェイスの仕様
インターフェイス仕様は、MIDL コンパイラによって生成されるデータ構造です。
- マネージャーの種類 UUID とマネージャー EPV
マネージャーの種類は UUID で、マネージャー EPV は、サーバーがクライアントからリモート プロシージャ コール要求を受信したときに実行されるマネージャー ルーチンを決定します。 サーバーによって提供されるインターフェイスの実装ごとに、個別のマネージャー EPV を登録する必要があります。
nil 以外のマネージャー型 UUID を指定する場合、サーバーは RpcObjectSetType を呼び出して、この nil 以外の型のオブジェクトを登録する必要があることに注意してください。
セキュリティ コールバック関数を指定すると、サーバー アプリケーションはクライアントごとにインターフェイスへのアクセスを制限できます。 既定では、セキュリティは省略可能です。サーバーが 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 |