wine/dlls/rpcrt4 cpsf.c

Alexandre Julliard julliard at wine.codeweavers.com
Tue Nov 29 05:04:58 CST 2005


ChangeSet ID:	21520
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at winehq.org	2005/11/29 05:04:58

Modified files:
	dlls/rpcrt4    : cpsf.c 

Log message:
	Robert Shearman <rob at codeweavers.com>
	The CLSID can be substituted by an IID present in one of the proxy
	file infos in NdrDllGetClassObject.

Patch: http://cvs.winehq.org/patch.py?id=21520

Old revision  New revision  Changes     Path
 1.14          1.15          +15 -1      wine/dlls/rpcrt4/cpsf.c

Index: wine/dlls/rpcrt4/cpsf.c
diff -u -p wine/dlls/rpcrt4/cpsf.c:1.14 wine/dlls/rpcrt4/cpsf.c:1.15
--- wine/dlls/rpcrt4/cpsf.c:1.14	29 Nov 2005 11: 4:58 -0000
+++ wine/dlls/rpcrt4/cpsf.c	29 Nov 2005 11: 4:58 -0000
@@ -133,6 +133,10 @@ HRESULT WINAPI NdrDllGetClassObject(REFC
                                    const CLSID *pclsid,
                                    CStdPSFactoryBuffer *pPSFactoryBuffer)
 {
+  TRACE("(%s, %s, %p, %p, %s, %p)\n", debugstr_guid(rclsid),
+    debugstr_guid(iid), ppv, pProxyFileList, debugstr_guid(pclsid),
+    pPSFactoryBuffer);
+
   *ppv = NULL;
   if (!pPSFactoryBuffer->lpVtbl) {
     pPSFactoryBuffer->lpVtbl = &CStdPSFactory_Vtbl;
@@ -141,7 +145,17 @@ HRESULT WINAPI NdrDllGetClassObject(REFC
   }
   if (IsEqualGUID(rclsid, pclsid))
     return IPSFactoryBuffer_QueryInterface((LPPSFACTORYBUFFER)pPSFactoryBuffer, iid, ppv);
-  return CLASS_E_CLASSNOTAVAILABLE;
+  else {
+    const ProxyFileInfo *info;
+    int index;
+    /* otherwise, the dll may be using the iid as the clsid, so
+     * search for it in the proxy file list */
+    if (FindProxyInfo(pProxyFileList, rclsid, &info, &index))
+      return IPSFactoryBuffer_QueryInterface((LPPSFACTORYBUFFER)pPSFactoryBuffer, iid, ppv);
+
+    WARN("class %s not available\n", debugstr_guid(rclsid));
+    return CLASS_E_CLASSNOTAVAILABLE;
+  }
 }
 
 /***********************************************************************



More information about the wine-cvs mailing list