RPC_INTERFACE_TEMPLATE 構造体 (rpcdce.h)
RPC_INTERFACE_TEMPLATE構造体は、RPC インターフェイス グループ サーバー インターフェイスを定義します。
構文
typedef struct {
unsigned long Version;
RPC_IF_HANDLE IfSpec;
UUID *MgrTypeUuid;
RPC_MGR_EPV *MgrEpv;
unsigned int Flags;
unsigned int MaxCalls;
unsigned int MaxRpcSize;
RPC_IF_CALLBACK_FN *IfCallback;
UUID_VECTOR *UuidVector;
RPC_CSTR Annotation;
void *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATE, *PRPC_INTERFACE_TEMPLATE;
メンバー
Version
このフィールドは予約済みであり、0 に設定する必要があります。
IfSpec
登録するインターフェイスを定義する MIDL によって生成される構造体。
MgrTypeUuid
MgrEpv に関連付ける UUID へのポインター。 NULL または nil UUID は、IfSpec を nil UUID に登録します。
MgrEpv
マネージャー ルーチンのエントリ ポイント ベクトル (EPV) を含むRPC_MGR_EPV構造体へのポインター。 NULL の場合、MIDL によって生成される既定の EPV が使用されます。
Flags
フラグ。 フラグ値の一覧については、「 インターフェイス登録フラグ」を参照してください。 インターフェイス グループ インターフェイスは、常に 自動リッスンとして扱われます。
MaxCalls
サーバーがこのインターフェイスで受け入れられる同時リモート プロシージャ コール要求の最大数。 RPC ランタイム ライブラリは、 MaxCalls で指定された呼び出し数よりも多くの同時呼び出し要求がサーバーで許可されないように最善を尽くします。 ただし、実際の数値は MaxCalls より大きくすることができ、プロトコル シーケンスごとに異なる場合があります。
他のインターフェイスでの呼び出しは、RpcServerListen で指定されたプロセス全体の MaxCalls パラメーターの値によって制御されます。
同時呼び出しの数が問題でない場合は、 RPC_C_LISTEN_MAX_CALLS_DEFAULTを使用して既定値を指定することで、サーバー側のパフォーマンスを若干向上させることができます。 これにより、RPC ランタイム環境で不要な制限が適用されなくなります。
MaxRpcSize
受信データ ブロックの最大サイズ (バイト単位)。 MaxRpcSize は、悪意のあるサービス拒否攻撃を防ぐのに役立つ場合があります。 リモート プロシージャ コールのデータ ブロックが MaxRpcSize より大きい場合、RPC ランタイム ライブラリは呼び出しを拒否し、 RPC_S_ACCESS_DENIED エラーをクライアントに送信します。 MaxRpcSize で値 (unsigned int) –1 を指定すると、受信データ ブロックのサイズの制限が解除されます。 このパラメーターは、 ncalrpc プロトコルを介した呼び出しには影響しません。
IfCallback
RPC_INTERFACE_GROUP_IDLE_CALLBACK_FNセキュリティ コールバック関数へのポインター。コールバックがない場合は NULL。 登録された各インターフェイスには、異なるコールバック関数を指定できます。
UuidVector
RPC エンドポイント マッパーに登録するサーバーによって提供されるオブジェクト UUID のベクトルへのポインター。 サーバー アプリケーションはこのベクトルを構築します。 NULL は 、登録するオブジェクト UUID がないことを示 します 。
Annotation
ローカル エンドポイント マップ データベースに追加された各製品間要素に適用される文字列コメントへのポインター。 文字列は、null 終端文字を含め、最大 64 文字の長さにできます。 注釈文字列がない場合は、null 値または null で終わる文字列 ("\0") を指定します。
注釈文字列は、情報のみを目的としてアプリケーションによって使用されます。 RPC はこの文字列を使用して、クライアントが通信するサーバー インスタンスを特定したり、エンドポイント マップ データベース内の要素を列挙したりしません。
SecurityDescriptor
インターフェイスにアクセスする権限を持つクライアントを記述するオプションのセキュリティ記述子。
注釈
インターフェイスを登録するために、サーバーは次の情報を提供します。
- インターフェイス仕様 インターフェイス仕様は、MIDL コンパイラによって生成されるデータ構造です。
- マネージャーの種類 UUID とマネージャー EPV マネージャーの種類 UUID とマネージャー EPV は、サーバーがクライアントからリモート プロシージャ コール要求を受信したときに実行されるマネージャー ルーチンを決定します。 サーバーによって提供されるインターフェイスの実装ごとに、個別のマネージャー EPV を登録する必要があります。 nil 以外のマネージャー型 UUID を指定する場合、サーバーは RpcObjectSetType も呼び出して、この nil 以外の型のオブジェクトを登録する必要があることに注意してください。
すべてのインターフェイス グループ インターフェイスは 、自動リッスンとして扱われます。 ランタイムは、インターフェイス グループがアクティブになるとすぐに呼び出しのリッスンを開始します。 RpcServerListen と RpcMgmtStopServerListening の呼び出しは、インターフェイスに影響を与えることはなく、IfSpec がNULL に設定された RpcServerUnregisterIf の呼び出しにも影響しません。
IfCallback でセキュリティ コールバック関数を指定すると、サーバー アプリケーションは個々のクライアントベースでインターフェイスへのアクセスを制限できます。 つまり、既定ではセキュリティは省略可能です。サーバーが RpcServerRegisterAuthInfo を呼び出した場合でも、サーバーランタイムはセキュリティで保護されていない呼び出しをディスパッチします。 サーバーが認証されたクライアントのみを受け入れる場合、インターフェイス コールバック関数は RpcBindingInqAuthClient、 RpcGetAuthorizationContextForClient、または RpcServerInqCallAttributes を呼び出してセキュリティ レベルを取得するか、 RpcImpersonateClient を使用してクライアントの偽装を試みる必要があります。 また、Flags で RPC_IF_ALLOW_SECURE_ONLY フラグを指定して、認証されていない呼び出しを拒否することもできます。
サーバー アプリケーションが IfCallback でそのインターフェイスのセキュリティ コールバック関数を指定すると、RPC ランタイムは、そのインターフェイスに対する認証情報なしで呼び出しを自動的に拒否します。 さらに、ランタイムは、各クライアントが使用したインターフェイスを記録します。 クライアントが、現在の通信セッション中に使用されていないインターフェイスに対して RPC を作成すると、RPC ランタイム ライブラリはインターフェイスのセキュリティ コールバック関数を呼び出します。 Flags でRPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTHを指定すると、認証されていないクライアントが自動的に拒否されるのを防ぐことができます。 NULL セキュリティ セッションの呼び出しは、匿名クライアントからの呼び出しであっても、認証情報を持つことができます。 したがって、匿名クライアントが接続できないようにするには、コールバックの存在だけでは十分ではありません。セキュリティ コールバック関数をチェックするか、RPC_IF_ALLOW_SECURE_ONLY フラグを使用する必要があります。 RPC_IF_ALLOW_SECURE_ONLYは、Windows XP 以降のバージョンの Windows でのみ null セッション呼び出しを拒否します。
コールバック関数のシグネチャについては、「 RPC_IF_CALLBACK_FN」を参照してください。
IfCallback のコールバック関数は、クライアントがこのインターフェイスでメソッドの呼び出しを許可されている場合、RPC_S_OKを返す必要があります。 その他のリターン コードを使用すると、クライアントは例外 RPC_S_ACCESS_DENIEDを受け取ります。
場合によっては、RPC ランタイムは、クライアントごとに、インターフェイスごとにセキュリティ コールバック関数を複数回呼び出す場合があります。 コールバック関数は、この可能性を処理できる必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリのみ] |
Header | rpcdce.h (Rpc.h を含む) |
こちらもご覧ください
RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN