CoCopyProxy function (combaseapi.h)

Makes a private copy of the specified proxy.

Syntax

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

Parameters

[in] pProxy

A pointer to the IUnknown interface on the proxy to be copied. This parameter cannot be NULL.

[out] ppCopy

Address of the pointer variable that receives the interface pointer to the copy of the proxy. This parameter cannot be NULL.

Return value

This function can return the following values.

Return code Description
S_OK
Indicates success.
E_INVALIDARG
One or more arguments are invalid.

Remarks

CoCopyProxy makes a private copy of the specified proxy. Typically, this function is called when a client needs to change the authentication information of its proxy through a call to either CoSetProxyBlanket or IClientSecurity::SetBlanket without changing this information for other clients. CoSetProxyBlanket affects all the users of an instance of a proxy, so creating a private copy of the proxy through a call to CoCopyProxy and then calling CoSetProxyBlanket (or IClientSecurity::SetBlanket) using the copy eliminates the problem.

This helper function encapsulates the following sequence of common calls (error handling excluded):

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

Local interfaces may not be copied. IUnknown and IClientSecurity are examples of existing local interfaces.

Copies of the same proxy have a special relationship with respect to QueryInterface. Given a proxy, a, of the IA interface of a remote object, suppose a copy of a is created, called b. In this case, calling QueryInterface from the b proxy for IID_IA will not retrieve the IA interface on b, but the one on a, the original proxy with the "default" security settings for the IA interface.

Requirements

Requirement Value
Minimum supported client Windows 2000 Professional [desktop apps only]
Minimum supported server Windows 2000 Server [desktop apps only]
Target Platform Windows
Header combaseapi.h (include Objbase.h)
Library Ole32.lib
DLL Ole32.dll

See also

CoSetProxyBlanket

IClientSecurity::SetBlanket

Security in COM