サービス品質 (RPC)
クライアント プログラムでは、RpcBindingSetAuthInfo 関数ではなく、RpcBindingSetAuthInfoEx 関数を使用して、認証されたバインドを作成できます。 その場合は、RpcBindingSetAuthInfoEx の最後のパラメーターとして RPC_SECURITY_QOS 構造体ポインターを渡します。 この構造体には、サービスの品質に関する情報が含まれています。 クライアント プログラムでは、ID 追跡を指定し、偽装の種類を選択することもできます。
RPC_SECURITY_QOS 構造体のメンバー 機能を使用して、クライアント/サーバー アプリケーションのどの部分を認証するかを設定します。 RPC_C_QOS_CAPABILITIES_DEFAULTが選択されている場合、RPC ランタイム ライブラリは SSP の既定値に従ってクライアントまたはサーバーを認証します。 既定では、Kerberos プロトコル SSP はクライアントとサーバーの両方を認証します。 Microsoft が提供するその他すべての SP の既定値は、サーバーに対してクライアントを認証することですが、クライアントに対してサーバーを認証しません。
クライアントとサーバーが常に相互に認証する必要がある場合は、RPC_SECURITY_QOS 構造体のメンバー 機能をRPC_C_QOS_CAPABILITIES_MUTUAL_AUTHに設定します。 一部のセキュリティ プロバイダーでは、相互認証をサポートしていない場合があります。 このようなセキュリティ プロバイダーに対してRPC_C_QOS_CAPABILITIES_MUTUAL_AUTHが指定されている場合は、リモート プロシージャ呼び出しが行われたときにエラーが返されます。 SCHANNEL SSP を使用する場合は、Capabilities メンバーを RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY に設定することもできます。 この定数は、クライアントの認証証明書を発行した証明機関が SSP のルート証明書ストアにない場合でも、SSP がリモート プロシージャ コールを検証することを指定します。 SSP が証明機関を認識しない場合、既定では証明書が拒否されます。 証明機関は、認証証明書を発行する独立した会社または組織 (VeriSign など) です。
アプリケーションでは、RPC ランタイム ライブラリで使用される ID 追跡を設定することもできます。 プログラムでは、一般 静的 ID 追跡が使用されます。 静的追跡では、クライアントの資格情報は、RpcBindingSetAuthInfo 関数を呼び出すときに設定されます。 その後、RPC ランタイム ライブラリは、呼び出し元スレッドまたは呼び出し元プロセスの ID の変更に関係なく、バインディングのすべての RPC 呼び出しにこれらの資格情報を使用します。 アプリケーションでは、動的 ID 追跡選択することもできます。 動的 ID 追跡は、バインド ハンドルではなく、各呼び出し時に呼び出し元スレッドの資格情報を使用するように RPC ランタイム ライブラリに指示します。 既定の ID 追跡は静的です。
クライアントの ID が変更されない場合、静的 ID 追跡のパフォーマンス特性が向上し、呼び出し元のスレッドの ID がセキュリティ システムに与えられた ID と同じであるかどうかを毎回チェックすることで RPC の実行時間を節約できます。 呼び出し元のスレッドの ID が呼び出しの間で変化する可能性があり、サーバーがそれらの変更を認識する必要がある場合は、動的な ID 追跡 (RPC ランタイムを静かに効率的に追跡し、ID が変更された場合は、ユーザーに代わってその変更を管理する) を指定することをお勧めします。
手記
ncalrpc 呼び出しの場合、静的 ID 追跡と動的 ID 追跡のパフォーマンス特性は異なります。状況によっては、どちらかの方が高速になる場合があります。
QOS 仕様の一部として、クライアント プログラムは、サーバー プログラムが代わりに実行できる偽装の種類を設定することもできます。 詳細については、「クライアント偽装」を参照してください。
RPC_SECURITY_QOS 構造体のバージョン番号フィールドは、常に RPC_C_SECURITY_QOS_VERSION に設定する必要があります。