次の方法で共有


RPC_SECURITY_QOS_V3_A 構造体 (rpcdce.h)

RPC_SECURITY_QOS_V3構造体は、バインディング ハンドルに対してバージョン 3 のセキュリティ品質設定を定義します。 Windows エディションでのバージョンの可用性については、「解説」を参照してください。

構文

typedef struct _RPC_SECURITY_QOS_V3_A {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
  unsigned long AdditionalSecurityInfoType;
  union {
    RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;
  } u;
  void          *Sid;
} RPC_SECURITY_QOS_V3_A, *PRPC_SECURITY_QOS_V3_A;

メンバー

Version

使用されている RPC_SECURITY_QOS 構造体のバージョン。 このトピックでは、 RPC_SECURITY_QOS 構造のバージョン 3 について説明します。 他 バージョンについては、「RPC_SECURITY_QOS、 RPC_SECURITY_QOS_V2RPC_SECURITY_QOS_V4およびRPC_SECURITY_QOS_V5 」を参照してください。

Capabilities

アプリケーションに提供されるセキュリティ サービス。 機能は、ビットごとの OR 演算子を使用して組み合わせることができるフラグのセットです。

意味
RPC_C_QOS_CAPABILITIES_DEFAULT
プロバイダー固有の機能が必要ない場合に使用されます。
RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH
このフラグを指定すると、RPC ランタイムはセキュリティ プロバイダーに相互認証を要求します。 一部のセキュリティ プロバイダーでは、相互認証がサポートされていません。 セキュリティ プロバイダーが相互認証をサポートしていない場合、またはサーバーの ID を確立できない場合、このようなサーバーへのリモート プロシージャ コールはエラー RPC_S_SEC_PKG_ERRORで失敗します。
メモ RPC は SSP に依存して、どのセキュリティ オプションが正常にネゴシエートされたかを示します。RPC は、SSP がオプションをネゴシエートできなかったと報告する呼び出しに失敗します。 ただし、一部のセキュリティ プロバイダーは、オプションが正常にネゴシエートされなかった場合でも、オプションのネゴシエーションが成功したことを報告することが知られています。 たとえば、NTLM は、相互認証をサポートしていない場合でも、下位互換性の理由から相互認証のネゴシエーションが成功したことを報告します。 セキュリティ オプションに関する動作を判断するために使用されている特定の SSP を確認します。
 
RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC
現在、実装されていません。
RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY
証明機関 (CA) がサーバーの信頼された CA の一覧にない場合でも、クライアントの資格情報を受け入れます。 この定数は、SCHANNEL SSP でのみ使用されます。
RPC_C_QOS_CAPABILITIES_IGNORE_DELEGATE_FAILURE
このフラグを指定すると、クライアント上の RPC ランタイムに対して、委任をサポートするセキュリティ コンテキストを確立するためのエラーを無視するように指示されます。 通常、クライアントが委任を要求し、セキュリティ システムが委任をサポートするセキュリティ コンテキストを確立できない場合は、エラー RPC_S_SEC_PKG_ERRORが返されます。このフラグを指定すると、エラーは返されません。
メモ Windows XP 以前のクライアント エディションではサポートされていません。Windows 2000 以前のサーバー エディションではサポートされていません。
 
RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT
このフラグを指定すると、RPC 呼び出しを行うマシンに対してサーバーがローカルであることを RPC に指定します。 この状況では、RPC は、 ServerPrincName または Sid メンバーで指定されたプリンシパルによって登録されたエンドポイントのみを取得するようにエンドポイント マッパーに指示します (これらのメンバーは 、RPC_SECURITY_QOS_V3RPC_SECURITY_QOS_V4および RPC_SECURITY_QOS_V5 でのみ使用できます)。 詳細については、「解説」を参照してください。
メモ Windows XP 以前のクライアント エディションではサポートされていません。Windows 2000 以前のサーバー エディションではサポートされていません。
 

IdentityTracking

コンテキスト追跡モードを設定します。 次の表に示す値のいずれかに設定する必要があります。

意味
RPC_C_QOS_IDENTITY_STATIC
セキュリティ コンテキストは 1 回だけ作成され、クライアント側で変更された場合でも、通信全体で変更されることはありません。 これは、RPC_SECURITY_QOS_V3が指定されていない場合の既定の動作です。
RPC_C_QOS_IDENTITY_DYNAMIC
コンテキストは、クライアントのトークンの ModifiedId が変更されるたびに変更されます。 すべてのプロトコルで ModifiedId が使用されます (注を参照)。

Windows 2000: すべてのリモート プロトコル ( ncalrpc 以外のすべてのプロトコル) では、AuthenticationID (LogonId とも呼ばれます) を使用して、クライアントの ID の変更を追跡します。 ncalrpc プロトコルでは ModifiedId が使用されます。

ImpersonationType

サーバー プロセスがクライアントを偽装できるレベル。

意味
RPC_C_IMP_LEVEL_DEFAULT
既定の偽装レベルを使用します。
RPC_C_IMP_LEVEL_ANONYMOUS
クライアントは、識別情報をサーバーに提供しません。 サーバーがクライアントを偽装したり、クライアントを識別したりすることはできません。 多くのサーバーでは、この偽装の種類の呼び出しが拒否されます。
RPC_C_IMP_LEVEL_IDENTIFY
サーバーはクライアントの ID を取得し、クライアントを偽装してAccess Controlリスト (ACL) チェックを実行できますが、クライアントを偽装することはできません。 詳細については、「 偽装レベル 」を参照してください。
メモ 一部のセキュリティ プロバイダーでは、この偽装の種類をRPC_C_IMP_LEVEL_IMPERSONATEと同等として扱う場合があります。
 
RPC_C_IMP_LEVEL_IMPERSONATE
サーバーは、ローカル システムではクライアントのセキュリティ コンテキストを偽装できますが、リモート システムでは偽装できません。
RPC_C_IMP_LEVEL_DELEGATE
サーバーはクライアントのセキュリティ コンテキストを偽装しつつ、そのクライアントに代わってアクションを実行できます。 サーバーは、クライアントの代理として動作しながら、他のサーバーへの発信呼び出しを行うこともできます。 サーバーは、他のマシン上のクライアントのセキュリティ コンテキストを使用して、クライアントとしてローカル リソースとリモート リソースにアクセスできます。

AdditionalSecurityInfoType

u 共用体に存在する追加の資格情報の種類を指定します。 次の定数がサポートされています。

サポートされている定数 意味
0
u 共用体には追加の資格情報は渡されません。
RPC_C_AUTHN_INFO_TYPE_HTTP
u 共用体の HttpCredentials メンバーは、RPC_HTTP_TRANSPORT_CREDENTIALS構造体を指します。 この値は、プロトコル シーケンスが ncacn_httpされている場合にのみ使用できます。 その他のプロトコル シーケンスは、RPC_S_INVALID_ARGを返します。

u

u.HttpCredentials

RPC_HTTP_TRANSPORT_CREDENTIALS 構造の 形式で RPC に渡す追加の資格情報のセット。 AdditionalSecurityInfoType メンバーが RPC_C_AUTHN_INFO_TYPE_HTTP に設定されている場合に使用されます。

Sid

セキュリティ識別子 (SID) をポイントします。 SID は ServerPrincName メンバーに代わるものであり、指定できるのは 1 つだけです。 セキュリティ プロバイダーが SCHANNEL SSP の場合、 Sid メンバーを NULL 以外に設定することはできません。 セキュリティのために内部的に Sid を使用するプロトコル シーケンスもあれば、 ServerPrincName を使用するプロトコル シーケンスもあります。 たとえば、 ncalrpc内部 的に Sid を使用し、呼び出し元が SID と ServerPrincName の両方を認識している場合、SID が渡された場合、 ncalrpc を使用する呼び出しがはるかに高速に完了する場合があります。 これに対し、 ncacn_ および ncadg_ プロトコル シーケンスは ServerPrincName を 内部的に使用するため、 ServerPrincName を指定すると呼び出しをより高速に実行できます。

注釈

次の一覧では、さまざまな Windows オペレーティング システムでの QOS バージョンの可用性を定義します。

  • バージョン 1: Windows 2000 以降。
  • バージョン 2: Service Pack 1 (SP1) 以降の Windows XP。
  • バージョン 3: Windows Server 2003 以降。
  • バージョン 4: Windows Vista 以降。
  • バージョン 5: Windows 8 以降。
Windows エディションでは、ダウンレベル バージョンもサポートされています。 たとえば、Windows Server 2003 ではバージョン 3 がサポートされていますが、バージョン 1 と 2 もサポートされています。

クライアント側のセキュリティ関数 RpcBindingInqAuthInfoExRpcBindingSetAuthInfo、RPC_SECURITY_QOS 構造体を使用して、バインディング ハンドルのサービスのセキュリティ品質を照会または設定します。

RPC では、RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT ヒントがサポートされています (Windows XP 以前のクライアント エディションではサポートされていません。Windows 2000 以前のサーバー エディションではサポートされていません)。 このヒントは、動的エンドポイントと相互認証が使用される場合にのみ使用されます。 さらに、 ncadg_ プロトコル シーケンスではサポートされていません。 このフラグをncadg_プロトコル シーケンスに使用する場合、または相互認証を使用しない場合、RPC_S_INVALID_ARGは RpcBindingSetAuthInfoEx 関数呼び出しから返されます。 このフラグは、サービス拒否攻撃を防ぐために設計されています。 このフラグを使用すると、 ServerPrincName または Sid メンバーで指定されたプリンシパルによって登録されたエンドポイントに対してのみ、RPC ランタイムがエンドポイント マッパーに要求されます。 これにより、ローカル コンピューター上の攻撃者が RPC クライアントをだまして、エンドポイント マッパーに登録したスプーフィング エンドポイントに接続することを防ぎます。 攻撃はローカルのみであるため (多くのユーザーを持つターミナル サーバー コンピューターなど)、フラグはローカルで行われた RPC 呼び出しに対してのみ機能します。

メモ Kerberos などの一部のセキュリティ プロバイダーでは、委任の偽装の種類がサポートされています。 委任偽装の種類をサポートする Windows エディションでは、クライアントが委任を要求したが、セキュリティ プロバイダーが委任を提供できない場合、RPC_C_QOS_CAPABILITIES_IGNORE_DELEGATE_FAILURE フラグが指定されていない限り、呼び出しは PRC_S_SEC_PKG_ERROR で失敗します。
 

要件

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

こちらもご覧ください

RPC_HTTP_TRANSPORT_CREDENTIALS

RPC_SECURITY_QOS

RPC_SECURITY_QOS_V2

RPC_SECURITY_QOS_V4

RPC_SECURITY_QOS_V5

RpcBindingInqAuthInfoEx

RpcBindingSetAuthInfoEx