Why does IConnectionPoint::Advise not work?
A. For IConnectionPoint::Advise (or for any other interface method that passes an IUnknown pointer) to work correctly, it must have the appropriate access permissions to the object to call QueryInterface on any remote interface. You are probably not calling CoInitializeSecurity() in your client and are therefore picking up the default DCOM-supplied security blanket. The client application must initialize security so that the server process identity is permitted to call in the client process. For this, the client must call CoInitializeSecurity and specify a security descriptor containing an ACE for the server process identity with the COM_RIGHTS_EXECUTE right. If the client does not call CoInitializeSecurity, the callback to the client is governed by the default security blanket, that is, the default authentication level and (if the former is not RPC_C_AUTHN_LEVEL_NONE) the default access permissions of the client computer.