次の方法で共有


CoCopyProxy 関数 (combaseapi.h)

指定したプロキシのプライベート コピーを作成します。

構文

HRESULT CoCopyProxy(
  [in]  IUnknown *pProxy,
  [out] IUnknown **ppCopy
);

パラメーター

[in] pProxy

コピーするプロキシ上の IUnknown インターフェイスへのポインター。 このパラメーターを NULL にすることはできません。

[out] ppCopy

プロキシのコピーへのインターフェイス ポインターを受け取るポインター変数のアドレス。 このパラメーターを NULL にすることはできません。

戻り値

この関数は、次の値を返すことができます。

リターン コード 説明
S_OK
成功を示します。
E_INVALIDARG
1 つ以上の引数が無効です。

解説

CoCopyProxy は 、指定したプロキシのプライベート コピーを作成します。 通常、この関数は、クライアントが他のクライアントのこの情報を変更せずに CoSetProxyBlanket または IClientSecurity::SetBlanket を呼び出してプロキシの認証情報を変更する必要がある場合に呼び出されます。 CoSetProxyBlanket はプロキシのインスタンスのすべてのユーザーに影響を与えるので、 CoCopyProxy の呼び出しを通じてプロキシのプライベート コピーを作成し、コピーを使用して CoSetProxyBlanket (または IClientSecurity::SetBlanket) を呼び出すと、問題が解消されます。

このヘルパー関数は、次の一連の一般的な呼び出しをカプセル化します (エラー処理は除外されます)。

    pProxy->QueryInterface(IID_IClientSecurity, (void**)&pcs);
    pcs->CopyProxy(punkProxy, ppunkCopy);
    pcs->Release();

ローカル インターフェイスはコピーできません。 IUnknownIClientSecurity は、既存のローカル インターフェイスの例です。

同じプロキシのコピーには、 QueryInterface に関して特別な関係があります。 リモート オブジェクトの IA インターフェイスのプロキシ a を指定すると、b と呼ばれる のコピーが作成されるとします。 この場合、IID_IAの b プロキシから QueryInterface を 呼び出すと、b の IA インターフェイスは取得されませんが、IA インターフェイスの "既定の" セキュリティ設定を持つ元のプロキシ上の IA インターフェイスは取得されません。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー combaseapi.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

関連項目

CoSetProxyBlanket

IClientSecurity::SetBlanket

COM のセキュリティ