So I've been working on a recent escalation case for my team that deals with a 16-bit client application trying to use a 32-bit out of process com server. When the client application would do CoCreateInstance on the server, this would work fine (hr = S_OK) and the out of process com exe would start. However, if the client then did a QueryInterface for a specific interface, it would fail with this HR:
Error Result : 0x80010104 ( -2147417852 )ID Defined as : RPC_E_FAULTError Type : OLE HRESULT ErrorFacility : FACILITY_RPC 0x00000001 ( 1 )Severity : SEVERITY_ERROR 0x00000001 ( 1 )Code : 0x00000104 ( 260 )Source Error file : Winerror.hMessage Text : RPC could not call the server or could not return the results of calling the server.
After digging around for a very long time and consulting with our development team, I finally found the solution. There was a change made in xpsp2 that essentially turned off the Universal Proxy Stub (UPS) by default but allowed for it to be turned back on through a registry key. That registry key is: