RPC_INTERFACE_TEMPLATEW 構造体 (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_WSTR           Annotation;
  void               *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEW, *PRPC_INTERFACE_TEMPLATEW;

メンバー

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 以外の型のオブジェクトを登録する必要があることに注意してください。

すべてのインターフェイス グループ インターフェイスは 、自動リッスンとして扱われます。 ランタイムは、インターフェイス グループがアクティブになるとすぐに呼び出しのリッスンを開始します。 RpcServerListenRpcMgmtStopServerListening の呼び出しは、インターフェイスに影響を与えることはなく、IfSpecNULL に設定された RpcServerUnregisterIf の呼び出しにも影響しません。

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

サーバー アプリケーションが IfCallback でそのインターフェイスのセキュリティ コールバック関数を指定すると、RPC ランタイムは、そのインターフェイスに対する認証情報のない呼び出しを自動的に拒否します。 さらに、ランタイムは、各クライアントが使用したインターフェイスを記録します。 クライアントが、現在の通信セッション中に使用されていないインターフェイスに RPC を作成すると、RPC ランタイム ライブラリはインターフェイスのセキュリティ コールバック関数を呼び出します。 フラグ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 ランタイムは、インターフェイスごとにクライアントごとにセキュリティ コールバック関数を複数回呼び出す場合があります。 コールバック関数は、この可能性を処理できる必要があります。

注意

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

要件

要件
サポートされている最小のクライアント Windows 8 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリのみ]
Header rpcdce.h (Rpc.h を含む)

こちらもご覧ください

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate