rpc bugfix
Ove Kaaven
ovek at arcticnet.no
Mon May 19 17:33:12 CDT 2003
Log:
Ove Kaaven <ovek at transgaming.com>
Fixed NdrDllRegisterProxy so it registers the key names that ole32
expects. Better debug traces (include name of interface).
Index: dlls/rpcrt4/cproxy.c
===================================================================
RCS file: /cvsroot/rewind/rewind/dlls/rpcrt4/cproxy.c,v
retrieving revision 1.2
diff -u -r1.2 cproxy.c
--- dlls/rpcrt4/cproxy.c 6 Dec 2002 09:59:24 -0000 1.2
+++ dlls/rpcrt4/cproxy.c 19 May 2003 22:29:00 -0000
@@ -32,6 +32,7 @@
const MIDL_STUBLESS_PROXY_INFO *stubless;
const IID* piid;
LPUNKNOWN pUnkOuter;
+ PCInterfaceName name;
LPPSFACTORYBUFFER pPSFactory;
LPRPCCHANNELBUFFER pChannel;
struct StublessThunk *thunks;
@@ -92,6 +93,7 @@
HRESULT WINAPI StdProxy_Construct(REFIID riid,
LPUNKNOWN pUnkOuter,
+ PCInterfaceName name,
CInterfaceProxyVtbl *vtbl,
CInterfaceStubVtbl *svtbl,
LPPSFACTORYBUFFER pPSFactory,
@@ -101,7 +103,7 @@
StdProxyImpl *This;
const MIDL_STUBLESS_PROXY_INFO *stubless = NULL;
- TRACE("(%p,%p,%p,%p,%p)\n", pUnkOuter, vtbl, pPSFactory, ppProxy, ppvObj);
+ TRACE("(%p,%p,%p,%p,%p) %s\n", pUnkOuter, vtbl, pPSFactory, ppProxy, ppvObj, name);
/* I can't find any other way to detect stubless proxies than this hack */
if (!IsEqualGUID(vtbl->header.piid, riid)) {
@@ -151,6 +153,7 @@
This->stubless = stubless;
This->piid = vtbl->header.piid;
This->pUnkOuter = pUnkOuter;
+ This->name = name;
This->pPSFactory = pPSFactory;
This->pChannel = NULL;
*ppProxy = (LPRPCPROXYBUFFER)&This->lpVtbl;
@@ -247,7 +250,7 @@
LPRPCCHANNELBUFFER *ppChannel)
{
ICOM_THIS_MULTI(StdProxyImpl,PVtbl,iface);
- TRACE("(%p)->GetChannel(%p)\n",This,ppChannel);
+ TRACE("(%p)->GetChannel(%p) %s\n",This,ppChannel,This->name);
*ppChannel = This->pChannel;
return S_OK;
@@ -257,7 +260,7 @@
const IID **ppiid)
{
ICOM_THIS_MULTI(StdProxyImpl,PVtbl,iface);
- TRACE("(%p)->GetIID(%p)\n",This,ppiid);
+ TRACE("(%p)->GetIID(%p) %s\n",This,ppiid,This->name);
*ppiid = This->piid;
return S_OK;
@@ -268,14 +271,14 @@
LPVOID *ppvObj)
{
ICOM_THIS_MULTI(StdProxyImpl,PVtbl,iface);
- TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(riid),ppvObj);
+ TRACE("(%p)->QueryInterface(%s,%p) %s\n",This,debugstr_guid(riid),ppvObj,This->name);
return IUnknown_QueryInterface(This->pUnkOuter,riid,ppvObj);
}
ULONG WINAPI IUnknown_AddRef_Proxy(LPUNKNOWN iface)
{
ICOM_THIS_MULTI(StdProxyImpl,PVtbl,iface);
- TRACE("(%p)->AddRef()\n",This);
+ TRACE("(%p)->AddRef() %s\n",This,This->name);
#if 0 /* interface refcounting */
return ++(This->RefCount);
#else /* object refcounting */
@@ -286,7 +289,7 @@
ULONG WINAPI IUnknown_Release_Proxy(LPUNKNOWN iface)
{
ICOM_THIS_MULTI(StdProxyImpl,PVtbl,iface);
- TRACE("(%p)->Release()\n",This);
+ TRACE("(%p)->Release() %s\n",This,This->name);
#if 0 /* interface refcounting */
if (!--(This->RefCount)) {
StdProxy_Destruct((LPRPCPROXYBUFFER)&This->lpVtbl);
Index: dlls/rpcrt4/cpsf.c
===================================================================
RCS file: /cvsroot/rewind/rewind/dlls/rpcrt4/cpsf.c,v
retrieving revision 1.3
diff -u -r1.3 cpsf.c
--- dlls/rpcrt4/cpsf.c 17 Feb 2003 14:32:37 -0000 1.3
+++ dlls/rpcrt4/cpsf.c 19 May 2003 22:29:00 -0000
@@ -78,8 +78,9 @@
debugstr_guid(riid),ppProxy,ppv);
if (!FindProxyInfo(This->pProxyFileList,riid,&ProxyInfo,&Index))
return E_NOINTERFACE;
- return StdProxy_Construct(riid, pUnkOuter, ProxyInfo->pProxyVtblList[Index],
- ProxyInfo->pStubVtblList[Index], iface, ppProxy, ppv);
+ return StdProxy_Construct(riid, pUnkOuter, ProxyInfo->pNamesArray[Index],
+ ProxyInfo->pProxyVtblList[Index],
+ ProxyInfo->pStubVtblList[Index], iface, ppProxy, ppv);
}
static HRESULT WINAPI CStdPSFactory_CreateStub(LPPSFACTORYBUFFER iface,
@@ -94,7 +95,8 @@
pUnkServer,ppStub);
if (!FindProxyInfo(This->pProxyFileList,riid,&ProxyInfo,&Index))
return E_NOINTERFACE;
- return CStdStubBuffer_Construct(riid, pUnkServer, ProxyInfo->pStubVtblList[Index], iface, ppStub);
+ return CStdStubBuffer_Construct(riid, pUnkServer, ProxyInfo->pNamesArray[Index],
+ ProxyInfo->pStubVtblList[Index], iface, ppStub);
}
static ICOM_VTABLE(IPSFactoryBuffer) CStdPSFactory_Vtbl =
@@ -159,7 +161,7 @@
TRACE("registering %s %s => %s\n", name, debugstr_guid(proxy->header.piid), clsid);
UuidToStringA((UUID*)proxy->header.piid, &iid);
- snprintf(keyname, sizeof(keyname), "Interface\\%s", iid);
+ snprintf(keyname, sizeof(keyname), "Interface\\{%s}", iid);
RpcStringFreeA(&iid);
if (RegCreateKeyExA(HKEY_CLASSES_ROOT, keyname, 0, NULL, 0,
KEY_WRITE, NULL, &key, NULL) == ERROR_SUCCESS) {
@@ -167,7 +169,8 @@
RegSetValueExA(key, NULL, 0, REG_SZ, name, strlen(name));
if (RegCreateKeyExA(key, "ProxyStubClsid32", 0, NULL, 0,
KEY_WRITE, NULL, &subkey, NULL) == ERROR_SUCCESS) {
- RegSetValueExA(subkey, NULL, 0, REG_SZ, clsid, strlen(clsid));
+ snprintf(module, sizeof(module), "{%s}", clsid);
+ RegSetValueExA(subkey, NULL, 0, REG_SZ, module, strlen(module));
RegCloseKey(subkey);
}
RegCloseKey(key);
@@ -177,7 +180,7 @@
}
/* register clsid to point to module */
- snprintf(keyname, sizeof(keyname), "CLSID\\%s", clsid);
+ snprintf(keyname, sizeof(keyname), "CLSID\\{%s}", clsid);
GetModuleFileNameA(hDll, module, sizeof(module));
TRACE("registering CLSID %s => %s\n", clsid, module);
if (RegCreateKeyExA(HKEY_CLASSES_ROOT, keyname, 0, NULL, 0,
@@ -219,7 +222,7 @@
TRACE("unregistering %s %s <= %s\n", name, debugstr_guid(proxy->header.piid), clsid);
UuidToStringA((UUID*)proxy->header.piid, &iid);
- snprintf(keyname, sizeof(keyname), "Interface\\%s", iid);
+ snprintf(keyname, sizeof(keyname), "Interface\\{%s}", iid);
RpcStringFreeA(&iid);
RegDeleteKeyA(HKEY_CLASSES_ROOT, keyname);
}
@@ -227,7 +230,7 @@
}
/* unregister clsid */
- snprintf(keyname, sizeof(keyname), "CLSID\\%s", clsid);
+ snprintf(keyname, sizeof(keyname), "CLSID\\{%s}", clsid);
GetModuleFileNameA(hDll, module, sizeof(module));
TRACE("unregistering CLSID %s <= %s\n", clsid, module);
RegDeleteKeyA(HKEY_CLASSES_ROOT, keyname);
Index: dlls/rpcrt4/cpsf.h
===================================================================
RCS file: /cvsroot/rewind/rewind/dlls/rpcrt4/cpsf.h,v
retrieving revision 1.1
diff -u -r1.1 cpsf.h
--- dlls/rpcrt4/cpsf.h 31 Oct 2002 21:28:17 -0000 1.1
+++ dlls/rpcrt4/cpsf.h 19 May 2003 22:29:00 -0000
@@ -9,6 +9,7 @@
HRESULT WINAPI StdProxy_Construct(REFIID riid,
LPUNKNOWN pUnkOuter,
+ PCInterfaceName name,
CInterfaceProxyVtbl *vtbl,
CInterfaceStubVtbl *svtbl,
LPPSFACTORYBUFFER pPSFactory,
@@ -21,6 +22,7 @@
HRESULT WINAPI CStdStubBuffer_Construct(REFIID riid,
LPUNKNOWN pUnkServer,
+ PCInterfaceName name,
CInterfaceStubVtbl *vtbl,
LPPSFACTORYBUFFER pPSFactory,
LPRPCSTUBBUFFER *ppStub);
Index: dlls/rpcrt4/cstub.c
===================================================================
RCS file: /cvsroot/rewind/rewind/dlls/rpcrt4/cstub.c,v
retrieving revision 1.3
diff -u -r1.3 cstub.c
--- dlls/rpcrt4/cstub.c 19 Apr 2003 12:18:20 -0000 1.3
+++ dlls/rpcrt4/cstub.c 19 May 2003 22:29:00 -0000
@@ -22,13 +22,14 @@
HRESULT WINAPI CStdStubBuffer_Construct(REFIID riid,
LPUNKNOWN pUnkServer,
+ PCInterfaceName name,
CInterfaceStubVtbl *vtbl,
LPPSFACTORYBUFFER pPSFactory,
LPRPCSTUBBUFFER *ppStub)
{
CStdStubBuffer *This;
- TRACE("(%p,%p,%p,%p)\n", pUnkServer, vtbl, pPSFactory, ppStub);
+ TRACE("(%p,%p,%p,%p) %s\n", pUnkServer, vtbl, pPSFactory, ppStub, name);
TRACE("iid=%s\n", debugstr_guid(vtbl->header.piid));
TRACE("vtbl=%p\n", &vtbl->Vtbl);
More information about the wine-patches
mailing list