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_FAULT
Error Type : OLE HRESULT Error
Facility : FACILITY_RPC   0x00000001   ( 1 )
Severity : SEVERITY_ERROR   0x00000001   ( 1 )
Code : 0x00000104   ( 260 )
Source Error file : Winerror.h
Message 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:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OleAut]
"EnableUPS"=dword:00000001