ReactOS 0.4.17-dev-1190-g4c812f4
ieframe_main.c
Go to the documentation of this file.
1/*
2 * Copyright 2011 Jacek Caban for CodeWeavers
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#include "ieframe.h"
20
21#include "initguid.h"
22#include "rpcproxy.h"
23#include "shlguid.h"
24#include "isguids.h"
25#include "ieautomation.h"
26
27#include "wine/debug.h"
28
30
33
36
37static REFIID tid_ids[] = {
38#define XIID(iface) &IID_ ## iface,
39#define XCLSID(class) &CLSID_ ## class,
41#undef XIID
42#undef XCLSID
43};
44
46{
48 ITypeLib *tl;
49
50 hres = LoadRegTypeLib(&LIBID_SHDocVw, 1, 1, LOCALE_SYSTEM_DEFAULT, &tl);
51 if(FAILED(hres)) {
52 ERR("LoadRegTypeLib failed: %08lx\n", hres);
53 return hres;
54 }
55
57 ITypeLib_Release(tl);
58 return hres;
59}
60
62{
64
65 if(!typelib)
67 if(!typelib)
68 return hres;
69
70 if(!typeinfos[tid]) {
72
73 hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti);
74 if(FAILED(hres)) {
75 ERR("GetTypeInfoOfGuid(%s) failed: %08lx\n", debugstr_guid(tid_ids[tid]), hres);
76 return hres;
77 }
78
80 ITypeInfo_Release(ti);
81 }
82
84 return S_OK;
85}
86
87static void release_typelib(void)
88{
89 unsigned i;
90
91 if(!typelib)
92 return;
93
94 for(i=0; i < ARRAY_SIZE(typeinfos); i++) {
95 if(typeinfos[i])
96 ITypeInfo_Release(typeinfos[i]);
97 }
98
99 ITypeLib_Release(typelib);
100}
101
103{
104 *ppv = NULL;
105
107 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
108 *ppv = iface;
109 }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
110 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
111 *ppv = iface;
112 }
113
114 if(*ppv) {
115 IUnknown_AddRef((IUnknown*)*ppv);
116 return S_OK;
117 }
118
119 FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
120 return E_NOINTERFACE;
121}
122
124{
125 TRACE("(%p)\n", iface);
126 return 2;
127}
128
130{
131 TRACE("(%p)\n", iface);
132 return 1;
133}
134
136{
137 TRACE("(%p)->(%x)\n", iface, fLock);
138 return S_OK;
139}
140
141static const IClassFactoryVtbl WebBrowserFactoryVtbl = {
147};
148
150
151static const IClassFactoryVtbl WebBrowserV1FactoryVtbl = {
157};
158
160
161static const IClassFactoryVtbl InternetShortcutFactoryVtbl = {
167};
168
170
171static const IClassFactoryVtbl CUrlHistoryFactoryVtbl = {
177};
178
180
181#ifdef __REACTOS__
183
184static const IClassFactoryVtbl CInternetFolderFactoryVtbl = {
190};
191
192static IClassFactory CInternetFolderFactory = { &CInternetFolderFactoryVtbl };
193#endif
194
195/******************************************************************
196 * DllMain (ieframe.@)
197 */
199{
200 TRACE("(%p %ld %p)\n", hInstDLL, fdwReason, lpv);
201
202 switch(fdwReason)
203 {
205 ieframe_instance = hInstDLL;
208 break;
210 if (lpv) break;
213 }
214
215 return TRUE;
216}
217
218/***********************************************************************
219 * DllGetClassObject (ieframe.@)
220 */
222{
223 if(IsEqualGUID(&CLSID_WebBrowser, rclsid)) {
224 TRACE("(CLSID_WebBrowser %s %p)\n", debugstr_guid(riid), ppv);
225 return IClassFactory_QueryInterface(&WebBrowserFactory, riid, ppv);
226 }
227
228 if(IsEqualGUID(&CLSID_WebBrowser_V1, rclsid)) {
229 TRACE("(CLSID_WebBrowser_V1 %s %p)\n", debugstr_guid(riid), ppv);
230 return IClassFactory_QueryInterface(&WebBrowserV1Factory, riid, ppv);
231 }
232
233 if(IsEqualGUID(rclsid, &CLSID_InternetShortcut)) {
234 TRACE("(CLSID_InternetShortcut %s %p)\n", debugstr_guid(riid), ppv);
235 return IClassFactory_QueryInterface(&InternetShortcutFactory, riid, ppv);
236 }
237
238 if(IsEqualGUID(&CLSID_CUrlHistory, rclsid)) {
239 TRACE("(CLSID_CUrlHistory %s %p)\n", debugstr_guid(riid), ppv);
240 return IClassFactory_QueryInterface(&CUrlHistoryFactory, riid, ppv);
241 }
242
243#ifdef __REACTOS__
244 if(IsEqualGUID(&CLSID_Internet, rclsid)) {
245 TRACE("(CLSID_Internet %s %p)\n", debugstr_guid(riid), ppv);
246 return IClassFactory_QueryInterface(&CInternetFolderFactory, riid, ppv);
247 }
248#endif
249
250 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
252}
253
254static const IClassFactoryVtbl InternetExplorerFactoryVtbl = {
260};
261
263
264static const IClassFactoryVtbl InternetExplorerManagerFactoryVtbl = {
270};
271
273
274/***********************************************************************
275 * DllCanUnloadNow (ieframe.@)
276 */
278{
279 TRACE("()\n");
280 return module_ref ? S_FALSE : S_OK;
281}
282
283/***********************************************************************
284 * IEGetWriteableHKCU (ieframe.@)
285 */
287{
288 FIXME("(%p) stub\n", pkey);
289 return E_NOTIMPL;
290}
291
292/***********************************************************************
293 * SetQueryNetSessionCount (ieframe.@)
294 */
296{
297 static LONG session_count;
298
299 TRACE("(%lx)\n", session_op);
300
301 switch(session_op)
302 {
303 case SESSION_QUERY:
304 return session_count;
306 return InterlockedIncrement(&session_count);
308 return InterlockedDecrement(&session_count);
309 };
310
311 return 0;
312}
static DWORD const fdwReason
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define E_NOTIMPL
Definition: ddrawi.h:99
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:507
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HRESULT WINAPI InternetExplorer_Create(IClassFactory *, IUnknown *, REFIID, void **)
Definition: iexplore.c:841
HRESULT WINAPI InternetShortcut_Create(IClassFactory *, IUnknown *, REFIID, void **)
Definition: intshcut.c:828
void register_iewindow_class(void)
Definition: iexplore.c:713
HRESULT WINAPI CUrlHistory_Create(IClassFactory *, IUnknown *, REFIID, void **)
Definition: urlhist.c:126
tid_t
Definition: ieframe.h:318
@ LAST_tid
Definition: ieframe.h:324
@ SESSION_DECREMENT
Definition: ieframe.h:384
@ SESSION_INCREMENT
Definition: ieframe.h:383
@ SESSION_QUERY
Definition: ieframe.h:382
#define TID_LIST
Definition: ieframe.h:313
void unregister_iewindow_class(void)
Definition: iexplore.c:735
HRESULT WINAPI WebBrowser_Create(IClassFactory *, IUnknown *, REFIID, void **)
Definition: webbrowser.c:1325
HRESULT WINAPI WebBrowserV1_Create(IClassFactory *, IUnknown *, REFIID, void **)
Definition: webbrowser.c:1320
HRESULT WINAPI InternetExplorerManager_Create(IClassFactory *, IUnknown *, REFIID, void **)
Definition: iexplore.c:930
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
Definition: ieframe_main.c:135
LONG module_ref
Definition: ieframe_main.c:31
static const IClassFactoryVtbl InternetExplorerFactoryVtbl
Definition: ieframe_main.c:254
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
Definition: ieframe_main.c:198
static const IClassFactoryVtbl InternetExplorerManagerFactoryVtbl
Definition: ieframe_main.c:264
static IClassFactory InternetShortcutFactory
Definition: ieframe_main.c:169
static const IClassFactoryVtbl WebBrowserFactoryVtbl
Definition: ieframe_main.c:141
static IClassFactory WebBrowserFactory
Definition: ieframe_main.c:149
static ITypeLib * typelib
Definition: ieframe_main.c:34
static IClassFactory WebBrowserV1Factory
Definition: ieframe_main.c:159
HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
Definition: ieframe_main.c:61
IClassFactory InternetExplorerFactory
Definition: ieframe_main.c:262
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: ieframe_main.c:129
IClassFactory InternetExplorerManagerFactory
Definition: ieframe_main.c:272
HINSTANCE ieframe_instance
Definition: ieframe_main.c:32
HRESULT WINAPI IEGetWriteableHKCU(HKEY *pkey)
Definition: ieframe_main.c:286
static const IClassFactoryVtbl CUrlHistoryFactoryVtbl
Definition: ieframe_main.c:171
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: ieframe_main.c:102
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: ieframe_main.c:221
static HRESULT load_typelib(void)
Definition: ieframe_main.c:45
static IClassFactory CUrlHistoryFactory
Definition: ieframe_main.c:179
static REFIID tid_ids[]
Definition: ieframe_main.c:37
LONG WINAPI SetQueryNetSessionCount(DWORD session_op)
Definition: ieframe_main.c:295
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: ieframe_main.c:123
static const IClassFactoryVtbl WebBrowserV1FactoryVtbl
Definition: ieframe_main.c:151
static const IClassFactoryVtbl InternetShortcutFactoryVtbl
Definition: ieframe_main.c:161
HRESULT WINAPI DllCanUnloadNow(void)
Definition: ieframe_main.c:277
static void release_typelib(void)
Definition: ieframe_main.c:87
static ITypeInfo * typeinfos[LAST_tid]
Definition: ieframe_main.c:35
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT WINAPI CInternetFolder_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: inetfolder.c:341
static TfClientId tid
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
HRESULT hres
Definition: protocol.c:432
static IUnknown * outer
Definition: compobj.c:82
#define LOCALE_SYSTEM_DEFAULT
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define TRACE(s)
Definition: solgame.cpp:4
SYMCRYPT_MAGIC_FIELD SYMCRYPT_ASYM_ALIGN union @5328 ti
uint32_t ULONG
Definition: typedefs.h:59
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772