CoCopyProxy  1XMLA83

Makes a private copy of the specified proxy.

HRESULT CoCopyProxy(

    IUnknown *  punkProxy

//IUnknown pointer to the proxy to copy

    IUnknown **  ppunkCopy

//Indirect IUnknown pointer to the copy

   );

 

 

Parameter

punkProxy

[in] Points to the IUnknown interface on the proxy to be copied. May not be NULL.

ppunkCopy

[out] Points to the location of the IUnknown pointer to the copy of the proxy. It may not be NULL.

 

Return Values

S_OK

Success.

E_INVALIDARG

One or more arguments are invalid.

 

Remarks

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

This 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. IUnknown1NEM0LU and IClientSecurity1MZKD73 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.

See Also

IClientSecurity::CopyProxy, Security in COM