urlmon: Added ProxyStub implementation.
diff --git a/.gitignore b/.gitignore
index b39a7f0..dcf494f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -117,6 +117,8 @@
dlls/stdole32.tlb/std_ole_v1.tlb
dlls/sti/sti_wia.h
dlls/sti/sti_wia_p.c
+dlls/urlmon/urlmon_urlmon.h
+dlls/urlmon/urlmon_urlmon_p.c
dlls/user.exe16
dlls/wprocs.dll16
include/activaut.h
diff --git a/dlls/urlmon/Makefile.in b/dlls/urlmon/Makefile.in
index 448a069..f0dd490 100644
--- a/dlls/urlmon/Makefile.in
+++ b/dlls/urlmon/Makefile.in
@@ -4,7 +4,9 @@
VPATH = @srcdir@
MODULE = urlmon.dll
IMPORTLIB = urlmon
-IMPORTS = uuid ole32 shlwapi wininet user32 advapi32 kernel32 ntdll
+IMPORTS = uuid ole32 rpcrt4 shlwapi wininet user32 advapi32 kernel32 ntdll
+EXTRADEFS = -D_URLMON_ -DENTRY_PREFIX=URLMON_ -DPROXY_DELEGATION -DREGISTER_PROXY_DLL \
+ -DPROXY_CLSID_IS="{0x79EAC9F1,0xBAF9,0x11CE,{0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B}}"
C_SRCS = \
bindctx.c \
@@ -26,10 +28,15 @@
session.c \
umon.c \
umstream.c \
- urlmon_main.c
+ urlmon_main.c \
+ usrmarshal.c
RC_SRCS = rsrc.rc
+IDL_P_SRCS = urlmon_urlmon.idl
+
+EXTRA_OBJS = dlldata.o
+
@MAKE_DLL_RULES@
@DEPENDENCIES@ # everything below this line is overwritten by make depend
diff --git a/dlls/urlmon/regsvr.c b/dlls/urlmon/regsvr.c
index 9561a23..9e27825 100644
--- a/dlls/urlmon/regsvr.c
+++ b/dlls/urlmon/regsvr.c
@@ -495,6 +495,12 @@
"urlmon.dll",
"Both"
},
+ { &CLSID_PSFactoryBuffer,
+ "URLMoniker ProxyStub Factory",
+ NULL,
+ "urlmon.dll",
+ "Apartment"
+ },
{ NULL } /* list terminator */
};
@@ -573,12 +579,14 @@
TRACE("\n");
- hr = register_coclasses(coclass_list);
- if (SUCCEEDED(hr))
+ hr = URLMON_DllRegisterServer();
+ if(SUCCEEDED(hr))
+ hr = register_coclasses(coclass_list);
+ if(SUCCEEDED(hr))
hr = register_interfaces(interface_list);
- if(FAILED(hr))
- return hr;
- return register_inf(TRUE);
+ if(SUCCEEDED(hr))
+ hr = register_inf(TRUE);
+ return hr;
}
/***********************************************************************
@@ -590,10 +598,12 @@
TRACE("\n");
- hr = unregister_coclasses(coclass_list);
- if (SUCCEEDED(hr))
+ hr = URLMON_DllUnregisterServer();
+ if(SUCCEEDED(hr))
+ hr = unregister_coclasses(coclass_list);
+ if(SUCCEEDED(hr))
hr = unregister_interfaces(interface_list);
- if(FAILED(hr))
- return hr;
- return register_inf(FALSE);
+ if(SUCCEEDED(hr))
+ hr = register_inf(FALSE);
+ return hr;
}
diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c
index a420308..272884e 100644
--- a/dlls/urlmon/urlmon_main.c
+++ b/dlls/urlmon/urlmon_main.c
@@ -348,6 +348,7 @@
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
{
unsigned int i;
+ HRESULT hr;
TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
@@ -357,6 +358,10 @@
return IClassFactory_QueryInterface(object_creation[i].cf, riid, ppv);
}
+ hr = URLMON_DllGetClassObject(rclsid, riid, ppv);
+ if(SUCCEEDED(hr))
+ return hr;
+
FIXME("%s: no class found.\n", debugstr_guid(rclsid));
return CLASS_E_CLASSNOTAVAILABLE;
}
diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h
index 21b9343..8db786b 100644
--- a/dlls/urlmon/urlmon_main.h
+++ b/dlls/urlmon/urlmon_main.h
@@ -48,6 +48,12 @@
extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
extern HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
+extern HRESULT WINAPI URLMON_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI URLMON_DllRegisterServer(void) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI URLMON_DllUnregisterServer(void) DECLSPEC_HIDDEN;
+
+extern GUID const CLSID_PSFactoryBuffer DECLSPEC_HIDDEN;
+
/**********************************************************************
* Dll lifetime tracking declaration for urlmon.dll
*/
diff --git a/dlls/urlmon/urlmon_urlmon.idl b/dlls/urlmon/urlmon_urlmon.idl
new file mode 100644
index 0000000..71a0719
--- /dev/null
+++ b/dlls/urlmon/urlmon_urlmon.idl
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2009 Piotr Caban for Codeweavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "urlmon.idl"
diff --git a/dlls/urlmon/usrmarshal.c b/dlls/urlmon/usrmarshal.c
new file mode 100644
index 0000000..b945563
--- /dev/null
+++ b/dlls/urlmon/usrmarshal.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2009 Piotr Caban for Codeweavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "urlmon_main.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
+
+HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(IWinInetHttpInfo* This,
+ DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
+ DWORD *pdwReserved)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(IWinInetHttpInfo* This,
+ DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
+ DWORD *pdwReserved)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(IWinInetInfo* This,
+ DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(IWinInetInfo* This,
+ DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(IBindHost* This,
+ IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+ REFIID riid, void **ppvObj)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindHost_MonikerBindToStorage_Stub(IBindHost* This,
+ IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+ REFIID riid, IUnknown **ppvObj)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindHost_MonikerBindToObject_Proxy(IBindHost* This,
+ IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+ REFIID riid, void **ppvObj)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(IBindHost* This,
+ IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+ REFIID riid, IUnknown **ppvObj)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy(
+ IBindStatusCallbackEx* This, DWORD *grfBINDF, BINDINFO *pbindinfo,
+ DWORD *grfBINDF2, DWORD *pdwReserved)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub(
+ IBindStatusCallbackEx* This, DWORD *grfBINDF, RemBINDINFO *pbindinfo,
+ RemSTGMEDIUM *pstgmed, DWORD *grfBINDF2, DWORD *pdwReserved)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
+ IBindStatusCallback* This, DWORD *grfBINDF, BINDINFO *pbindinfo)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub(
+ IBindStatusCallback* This, DWORD *grfBINDF,
+ RemBINDINFO *pbindinfo, RemSTGMEDIUM *pstgmed)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
+ IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
+ FORMATETC *pformatetc, STGMEDIUM *pstgmed)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub(
+ IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
+ RemFORMATETC *pformatetc, RemSTGMEDIUM *pstgmed)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBinding_GetBindResult_Proxy(IBinding* This,
+ CLSID *pclsidProtocol, DWORD *pdwResult,
+ LPOLESTR *pszResult, DWORD *pdwReserved)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBinding_GetBindResult_Stub(IBinding* This,
+ CLSID *pclsidProtocol, DWORD *pdwResult,
+ LPOLESTR *pszResult, DWORD dwReserved)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE IWindowForBindingUI_GetWindow_Proxy(
+ IWindowForBindingUI* This, REFGUID rguidReason, HWND *phwnd)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer, PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase)
+{
+ FIXME("stub\n");
+}