次の方法で共有


RPC_INTERFACE_TEMPLATEA構造体 (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_TEMPLATEA, *PRPC_INTERFACE_TEMPLATEA;

メンバーズ

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を使用してクライアント 偽装を試みる必要があります。 認証されていない呼び出しを拒否するために、FlagsRPC_IF_ALLOW_SECURE_ONLY フラグを指定することもできます。

サーバー アプリケーションが ifCallbackでインターフェイスのセキュリティ コールバック関数 指定すると、RPC ランタイムはそのインターフェイスに対する認証情報なしで呼び出しを自動的に拒否します。 さらに、ランタイムは、各クライアントが使用したインターフェイスを記録します。 クライアントが現在の通信セッション中に使用していないインターフェイスに RPC を作成すると、RPC ランタイム ライブラリはインターフェイスのセキュリティ コールバック関数を呼び出します。 FlagsRPC_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 [デスクトップ アプリのみ]
ヘッダー rpcdce.h (Rpc.h を含む)

関連項目

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings の

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose の

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate の