RPC_SECURITY_QOS 構造体 (rpcdce.h)

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

構文

typedef struct _RPC_SECURITY_QOS {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS;

メンバー

Version

使用されている RPC_SECURITY_QOS 構造体のバージョン。 このトピックでは、 RPC_SECURITY_QOS 構造のバージョン 1 について説明します。 その他のバージョンについては、「 RPC_SECURITY_QOS_V2RPC_SECURITY_QOS_V3RPC_SECURITY_QOS_V4RPC_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_V4RPC_SECURITY_QOS_V5 でのみ使用できます)。 詳細については、「解説」を参照してください。
メモ Windows XP 以前のクライアント エディションではサポートされていません。Windows 2000 以前のサーバー エディションではサポートされていません。
 
RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY
設定されている場合、RPC ランタイムは SChannel SSP を使用して、暗号化サービス プロバイダー (CSP) による PIN プロンプト ダイアログ ボックスを表示せずにスマートカードベースの認証を実行します。

RpcBindingSetAuthInfoEx の呼び出しでは、AuthIdentity パラメーターは、次のメンバーを含むSEC_WINNT_AUTH_IDENTITY構造体である必要があります。

  • ユーザー、SCHANNEL_CRED 構造体へのポインターである必要があります
  • UserLength は 0 である必要があります
  • ドメイン は NULL である必要があります
  • DomainLength は 0 である必要があります
  • パスワード には、証明書の PIN または NULL を指定できます。 Password が PIN の場合、PasswordLength は PIN の正しい長さである必要があり、Password が NULL の場合、PasswordLength は 0 である必要があります
RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY フラグが SChannel 以外の SSP に使用されている場合、または SEC_WINNT_AUTH_IDENTITY のメンバー上記に準拠していない場合、RPC_S_INVALID_ARGRpcBindingSetAuthInfoEx によって返されます。

IdentityTracking

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

意味
RPC_C_QOS_IDENTITY_STATIC
セキュリティ コンテキストは 1 回だけ作成され、クライアント側で変更された場合でも、通信全体で変更されることはありません。 これは、RPC_SECURITY_QOSが指定されていない場合の既定の動作です。
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_IMPERSONATEと同等として扱う場合があります。 Windows セキュリティ プロバイダーから、これは、ncalrpc 以外のプロトコル シーケンスで使用する場合にのみ、RPC_C_AUTHN_WINNTによって行われます。 また、RPC_C_AUTHN_GSS_NEGOTIATE、RPC_C_AUTHN_GSS_SCHANNEL、RPC_C_AUTHN_GSS_KERBEROSによって行われます。
 
RPC_C_IMP_LEVEL_IDENTIFY
サーバーはクライアントの ID を取得し、クライアントを偽装してAccess Controlリスト (ACL) チェックを実行できますが、クライアントを偽装することはできません。 詳細については、「 偽装レベル 」を参照してください。
メモ セキュリティ プロバイダーによっては、この偽装の種類をRPC_C_IMP_LEVEL_IMPERSONATEと同等として扱う場合があります。 Windows セキュリティ プロバイダーから、これは、ncalrpc 以外のプロトコル シーケンスで使用する場合にのみ、RPC_C_AUTHN_WINNTによって行われます。 また、RPC_C_AUTHN_GSS_NEGOTIATE、RPC_C_AUTHN_GSS_SCHANNEL、RPC_C_AUTHN_GSS_KERBEROSによって行われます。
 
RPC_C_IMP_LEVEL_IMPERSONATE
サーバーは、ローカル システムではクライアントのセキュリティ コンテキストを偽装できますが、リモート システムでは偽装できません。
RPC_C_IMP_LEVEL_DELEGATE
サーバーはクライアントのセキュリティ コンテキストを偽装しつつ、そのクライアントに代わってアクションを実行できます。 サーバーは、クライアントに代わって動作しながら、他のサーバーへの発信呼び出しを行うこともできます。 サーバーは、他のマシン上のクライアントのセキュリティ コンテキストを使用して、クライアントとしてローカル リソースとリモート リソースにアクセスできます。

注釈

次の一覧では、さまざまな 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 ヒントがサポートされています。 このヒントは、動的エンドポイントと相互認証が使用される場合にのみ使用されます。 さらに、 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 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
Header rpcdce.h (Rpc.h を含む)

こちらもご覧ください

RPC_SECURITY_QOS_V2

RPC_SECURITY_QOS_V3

RPC_SECURITY_QOS_V4

RPC_SECURITY_QOS_V5

RpcBindingInqAuthInfoEx

RpcBindingSetAuthInfoEx