RPC_SECURITY_QOS_V5_A 構造体 (rpcdce.h)

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

構文

typedef struct _RPC_SECURITY_QOS_V5_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;
  unsigned int  EffectiveOnly;
  void          *ServerSecurityDescriptor;
} RPC_SECURITY_QOS_V5_A, *PRPC_SECURITY_QOS_V5_A;

メンバー

Version

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

Capabilities

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

意味
RPC_C_QOS_CAPABILITIES_DEFAULT
プロバイダー固有の機能は必要ありません。
RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH
RPC ランタイムは、セキュリティ プロバイダーからの相互認証を要求します。 一部のセキュリティ プロバイダーでは、相互認証がサポートされていません。 セキュリティ プロバイダーが相互認証をサポートしていない場合、またはサーバーの ID を確立できない場合、このようなサーバーへのリモート プロシージャ コールはエラー RPC_S_SEC_PKG_ERRORで失敗します。
メモ RPC は SSP に依存して、どのセキュリティ オプションが正常にネゴシエートされたかを示します。SSP がオプションをネゴシエートできなかったと報告した場合、RPC 呼び出しは失敗します。 ただし、一部のセキュリティ プロバイダーは、オプションが正常にネゴシエートされなかった場合でも、オプションのネゴシエーションが成功したことを報告することが知られています。 たとえば、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 は、 ServerPrincName または Sid メンバーで指定されたプリンシパルによって登録されたエンドポイントのみを取得するようにエンドポイント マッパーに指示します (これらのメンバーは 、RPC_SECURITY_QOS_V3RPC_SECURITY_QOS_V4RPC_SECURITY_QOS_V5 でのみ使用できます)。 詳細については、「解説」を参照してください。
メモ Windows XP 以前のクライアント エディションではサポートされていません。Windows 2000 以前のサーバー エディションではサポートされていません。
 

IdentityTracking

コンテキスト追跡モードを次のいずれかの値として指定します。

意味
RPC_C_QOS_IDENTITY_STATIC
セキュリティ コンテキストは 1 回だけ作成され、クライアント側で変更された場合でも、通信全体で変更されることはありません。 これは、RPC_SECURITY_QOS_V5が指定されていない場合の既定の動作です。
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 を指定すると呼び出しをより高速に実行できます。

EffectiveOnly

設定されている場合、有効な特権のみがサーバーに表示されます。

ServerSecurityDescriptor

サーバーを識別する SECURITY_DESCRIPTOR へのポインター。 相互認証に必要です。

注釈

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

  • バージョン 1: Windows 2000 以降。
  • バージョン 2: Windows XP Service Pack 1 (SP1) 以降。
  • バージョン 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 8 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリのみ]
Header rpcdce.h (Rpc.h を含む)

こちらもご覧ください

RPC_BINDING_HANDLE_SECURITY_V1

RPC_HTTP_TRANSPORT_CREDENTIALS

RPC_SECURITY_QOS

RPC_SECURITY_QOS_V2

RPC_SECURITY_QOS_V3

RPC_SECURITY_QOS_V4

RpcBindingInqAuthInfoEx

RpcBindingSetAuthInfoEx