Which QueryInterface is called?

Bill Medland billmedland at mercuryspeed.com
Mon Jan 17 12:51:34 CST 2005


(Mike? Robert?,)

I am trying to understand what is failing in a piece of -out-of-process COM 
under Wine.  Basically it is an ATL-based CreateInstance that is returning 
E_NOINTERFACE under Wine.

Below is a cut-down copy of the trace.

What I don't understand is which QueryInterface is being called.  I don't 
totally understand what is going on in the marshalling etc. but from what I 
can see I expected to see ClientIdentity_QueryRef called and some sort of 
marshalling going on in the last stages.

Can anyone point me at which code is probably implementing the QueryInterface?


Basic code:
rclsid = __uuidof(ACCPACSignonMgr)
CoCreateInstance (rclsid, NULL, CLSCTX_ALL, __uuidof(IUnknown), &pIUnknown);
OleRun (pIUnknown)
pIUnknown->QueryInterface (getIID(), &m_pInterface)
pIUnknown->Release

Problem:
pIUnknown->QueryInterface returns E_NOINTERFACE
The interface is provided by a an object running in a local server

Why don't I see a trace on ClientIdentity_QueryInterface?

Trace

0009:trace:ole:WINE_StringFromCLSID 
0x455e78->{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}
0009:trace:ole:CoGetClassObject 
	CLSID:	{b6b35894-dd6f-11d3-84ac-00c04f0e1b46},
	IID:	{00000001-0000-0000-c000-000000000046}
0009:warn:ole:CoGetClassObject class {B6B35894-DD6F-11D3-84AC-00C04F0E1B46} 
not registered inproc
0009:trace:ole:create_marshalled_proxy 
rclsid={b6b35894-dd6f-11d3-84ac-00c04f0e1b46}, 
iid={00000001-0000-0000-c000-000000000046}
0009:trace:ole:WINE_StringFromCLSID 
0x455e78->{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}
0009:trace:ole:create_marshalled_proxy waiting for 
\\.\pipe\{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}
0009:trace:ole:WINE_StringFromCLSID 
0x455e78->{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}
0009:trace:ole:create_server activating local server 
'L"G:\\runtime\\a4wsignonmgr.exe -Embedding"' for 
{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}
0012:trace:ole:DllMain 0x3a0000 0x1 0x1
0009:trace:ole:create_marshalled_proxy waiting for 
\\.\pipe\{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}
0009:warn:ole:create_marshalled_proxy Could not open named pipe to broker 
\\.\pipe\{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}, le is 2
0012:trace:ole:DllMain (0x5e0000,1,0x1)
0012:trace:ole:CoInitializeEx ((nil), 2)
0012:trace:ole:CoInitializeEx () - Initializing the COM libraries
0012:trace:ole:RunningObjectTableImpl_Initialize ()
0012:trace:ole:COM_CreateApartment creating new apartment, model=2
0012:trace:ole:COM_CreateApartment Created apartment on OXID 1100000012
0012:trace:ole:WINE_StringFromCLSID 
0x41f320->{A2086A6A-3F3E-457C-8102-A4F99AD7C2DA}
0012:trace:ole:CoRegisterClassObject 
({b6b35894-dd6f-11d3-84ac-00c04f0e1b46},0x7fca0180,0x00000004,0x00000001,0x41f094)
0012:trace:ole:CoMarshalInterface (0x77e28e58, 
{00000001-0000-0000-c000-000000000046}, 0x7fca0180, 0, (nil), 1)
0012:trace:ole:CoGetStandardMarshal 
({00000001-0000-0000-c000-000000000046},0x7fca0180,0,(nil),1,0x76fd60)
0012:trace:ole:CoMarshalInterface Using standard marshaling
0012:trace:ole:CoMarshalInterface Calling IMarshal::MarshalInterace
0012:trace:ole:StdMarshalImpl_MarshalInterface 
(...,{00000001-0000-0000-c000-000000000046},...)
0012:trace:ole:start_apartment_listener_thread apt->listenertid=0
0014:trace:ole:apartment_listener_thread Apartment listener thread starting on 
(\\.\pipe\WINE_OLE_StubMgr_0000001100000012)
0012:trace:ole:CoGetPSClsid () riid={00000001-0000-0000-c000-000000000046}, 
pclsid=0x76fcf4
0012:trace:ole:WINE_StringFromCLSID 
0x3e7df0->{00000001-0000-0000-C000-000000000046}
0012:trace:ole:__CLSIDFromStringA {00000320-0000-0000-C000-000000000046} -> 
0x76fcf4
0012:trace:ole:CoGetPSClsid () Returning 
CLSID={00000320-0000-0000-c000-000000000046}
0012:trace:ole:WINE_StringFromCLSID 
0x76fcf4->{00000320-0000-0000-C000-000000000046}
0012:trace:ole:CoGetClassObject 
	CLSID:	{00000320-0000-0000-c000-000000000046},
	IID:	{d5f569d0-593b-101a-b569-08002b2dbf7a}
0012:trace:ole:COMPOBJ_DLLList_Add 
0012:trace:ole:PSFacBuf_CreateStub 
({00000001-0000-0000-c000-000000000046},0x7fca0180,0x76fcec)
0012:fixme:ole:StdMarshalImpl_MarshalInterface table marshalling unimplemented
0012:trace:ole:get_stub_manager_from_object not found for object 0x7fca0180
0012:trace:ole:register_ifstub constructing new stub manager
0012:trace:ole:new_stub_manager Created new stub manager (oid=1) at 0x77e28c28 
for object with IUnknown 0x7fca0180
0012:trace:ole:stub_manager_new_ifstub oid=1, stubbuffer=0x77e28f18, 
iptr=0x7fca0180, iid={00000001-0000-0000-c000-000000000046}, 
tablemarshal=TRUE
0012:trace:ole:stub_manager_int_release after 1
0015:trace:ole:local_server_thread Starting threader for 
{b6b35894-dd6f-11d3-84ac-00c04f0e1b46}.
0015:trace:ole:WINE_StringFromCLSID 
0x77e28e80->{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}
0009:trace:ole:create_marshalled_proxy waiting for 
\\.\pipe\{B6B35894-DD6F-11D3-84AC-00C04F0E1B46}
0015:trace:ole:local_server_thread marshalling IClassFactory to client
0009:trace:ole:create_marshalled_proxy read marshal id from pipe
0009:trace:ole:create_marshalled_proxy unmarshalling classfactory
0009:trace:ole:CoUnmarshalInterface (0x77e5e780, 
{00000001-0000-0000-c000-000000000046}, 0x1c80f4dc)
0009:trace:ole:get_unmarshaler_from_stream Using standard unmarshaling
0009:trace:ole:StdMarshalImpl_UnmarshalInterface 
(...,{00000001-0000-0000-c000-000000000046},....)
0009:trace:ole:CoGetPSClsid () riid={00000001-0000-0000-c000-000000000046}, 
pclsid=0x1c80ef84
0009:trace:ole:WINE_StringFromCLSID 
0x30070df0->{00000001-0000-0000-C000-000000000046}
0009:trace:ole:__CLSIDFromStringA {00000320-0000-0000-C000-000000000046} -> 
0x1c80ef84
0009:trace:ole:CoGetPSClsid () Returning 
CLSID={00000320-0000-0000-c000-000000000046}
0009:trace:ole:WINE_StringFromCLSID 
0x1c80ef84->{00000320-0000-0000-C000-000000000046}
0009:trace:ole:CoGetClassObject 
	CLSID:	{00000320-0000-0000-c000-000000000046},
	IID:	{d5f569d0-593b-101a-b569-08002b2dbf7a}
0015:trace:ole:local_server_thread done marshalling IClassFactory
0009:trace:ole:COMPOBJ_DLLList_Add 
0009:trace:ole:ClientIdentity_AddRef 0x77e62470 - before 0
0009:trace:ole:CFProxy_CreateInstance 
((nil),{00000000-0000-0000-c000-000000000046},0x1c80f50c)
0009:trace:ole:PipeBuf_GetBuffer 
(0x1c80f488,{00000001-0000-0000-c000-000000000046})
0009:trace:ole:PipeBuf_SendReceive ()
0016:trace:ole:stub_dispatch_thread starting for apartment OXID 
0000000800000009
0016:trace:ole:stub_manager_int_addref before 1
0016:trace:ole:get_stub_manager found 0x77e28c28 for oid 1
0016:trace:ole:stub_manager_int_release after 1
0016:trace:ole:CFStub_Invoke 
->CreateInstance({00000000-0000-0000-c000-000000000046})
0016:trace:ole:CoMarshalInterface (0x77e49320, 
{00000000-0000-0000-c000-000000000046}, 0x7fca0164, 0, (nil), 0)
0016:trace:ole:CoGetStandardMarshal 
({00000000-0000-0000-c000-000000000046},0x7fca0164,0,(nil),0,0x5da8cfec)
0016:trace:ole:CoMarshalInterface Using standard marshaling
0016:trace:ole:CoMarshalInterface Calling IMarshal::MarshalInterace
0016:trace:ole:StdMarshalImpl_MarshalInterface 
(...,{00000000-0000-0000-c000-000000000046},...)
0016:trace:ole:start_apartment_listener_thread apt->listenertid=20
0016:trace:ole:CoGetPSClsid () riid={00000000-0000-0000-c000-000000000046}, 
pclsid=0x5da8cf80
0016:trace:ole:WINE_StringFromCLSID 
0x5da8d100->{00000000-0000-0000-C000-000000000046}
0016:trace:ole:__CLSIDFromStringA {00000320-0000-0000-C000-000000000046} -> 
0x5da8cf80
0016:trace:ole:CoGetPSClsid () Returning 
CLSID={00000320-0000-0000-c000-000000000046}
0016:trace:ole:WINE_StringFromCLSID 
0x5da8cf80->{00000320-0000-0000-C000-000000000046}
0016:trace:ole:CoGetClassObject 
	CLSID:	{00000320-0000-0000-c000-000000000046},
	IID:	{d5f569d0-593b-101a-b569-08002b2dbf7a}
0016:trace:ole:COMPOBJ_DLLList_Add 
0016:trace:ole:PSFacBuf_CreateStub 
({00000000-0000-0000-c000-000000000046},0x7fca0164,0x5da8cf78)
0016:trace:ole:get_stub_manager_from_object not found for object 0x7fca0164
0016:trace:ole:register_ifstub constructing new stub manager
0016:trace:ole:new_stub_manager Created new stub manager (oid=2) at 0x77e4fd90 
for object with IUnknown 0x7fca0164
0016:trace:ole:stub_manager_new_ifstub oid=2, stubbuffer=0x77e4ac98, 
iptr=0x7fca0164, iid={00000000-0000-0000-c000-000000000046}, 
tablemarshal=FALSE
0016:trace:ole:stub_manager_ext_addref added 1 refs to 0x77e4fd90 (oid 2), rc 
is now 1
0016:trace:ole:stub_manager_int_release after 1
0009:trace:ole:CFProxy_CreateInstance got 56 bytes data.
0009:trace:ole:CoUnmarshalInterface (0x77e5a3e8, 
{00000000-0000-0000-c000-000000000046}, 0x1c80f50c)
0009:trace:ole:get_unmarshaler_from_stream Using standard unmarshaling
0009:trace:ole:StdMarshalImpl_UnmarshalInterface 
(...,{00000000-0000-0000-c000-000000000046},....)
0009:trace:ole:CoGetPSClsid () riid={00000000-0000-0000-c000-000000000046}, 
pclsid=0x1c80f3b4
0009:trace:ole:WINE_StringFromCLSID 
0x455cf0->{00000000-0000-0000-C000-000000000046}
0009:trace:ole:__CLSIDFromStringA {00000320-0000-0000-C000-000000000046} -> 
0x1c80f3b4
0009:trace:ole:CoGetPSClsid () Returning 
CLSID={00000320-0000-0000-c000-000000000046}
0009:trace:ole:WINE_StringFromCLSID 
0x1c80f3b4->{00000320-0000-0000-C000-000000000046}
0009:trace:ole:CoGetClassObject 
	CLSID:	{00000320-0000-0000-c000-000000000046},
	IID:	{d5f569d0-593b-101a-b569-08002b2dbf7a}
0009:trace:ole:COMPOBJ_DLLList_Add 
0009:trace:ole:ClientIdentity_AddRef 0x77e625c0 - before 0
0009:trace:ole:ClientIdentity_Release 0x77e62470 - after 0
0009:trace:ole:PipeBuf_Release written disconnect packet
0016:trace:ole:COM_RpcReceive read disconnect header
0016:trace:ole:stub_manager_int_addref before 1
0016:trace:ole:get_stub_manager found 0x77e28c28 for oid 1
0016:trace:ole:stub_manager_ext_release removed 1 refs from 0x77e28c28 (oid 
1), rc is now 4294967295
0016:trace:ole:stub_manager_int_release after 1
0009:trace:ole:CoCreateInstance Successfully returning 0x77e62678 for 
interface {00000000-0000-0000-c000-000000000046} of class 
{b6b35894-dd6f-11d3-84ac-00c04f0e1b46}
0009:trace:ole:OleRun Enter
0009:trace:ole:OleRun No runnable interface
???? Why is there no ClientIdentity_QueryInterface here?
0009:trace:ole:ClientIdentity_Release 0x77e625c0 - after 0



0009:trace:ole:PipeBuf_Release written disconnect packet
0016:trace:ole:COM_RpcReceive read disconnect header
0016:trace:ole:stub_manager_int_addref before 1
0016:trace:ole:get_stub_manager found 0x77e4fd90 for oid 2
0016:trace:ole:stub_manager_ext_release removed 1 refs from 0x77e4fd90 (oid 
2), rc is now 0
0016:trace:ole:stub_manager_int_release after 1
0016:trace:ole:stub_manager_int_release after 0
0016:trace:ole:stub_manager_delete destroying 0x77e4fd90 (oid=2)
0016:trace:ole:stub_manager_delete_ifstub m=0x77e4fd90, m->oid=2, 
ipid={00000000-0000-0000-c000-000000000046}

-- 
Bill Medland
mailto:billmedland at mercuryspeed.com
http://webhome.idirect.com/~kbmed




More information about the wine-devel mailing list