ReactOS 0.4.17-dev-934-g091855f
wshom_main.c File Reference
#include "wshom_private.h"
#include "initguid.h"
#include "wshom.h"
#include "rpcproxy.h"
#include "wine/debug.h"
Include dependency graph for wshom_main.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (wshom)
 
static struct provideclassinfo * impl_from_IProvideClassInfo (IProvideClassInfo *iface)
 
static HRESULT load_typelib (void)
 
static HRESULT get_typeinfo_of_guid (const GUID *guid, ITypeInfo **tinfo)
 
HRESULT get_typeinfo (tid_t tid, ITypeInfo **typeinfo)
 
static void release_typelib (void)
 
static HRESULT WINAPI provideclassinfo_QueryInterface (IProvideClassInfo *iface, REFIID riid, void **obj)
 
static ULONG WINAPI provideclassinfo_AddRef (IProvideClassInfo *iface)
 
static ULONG WINAPI provideclassinfo_Release (IProvideClassInfo *iface)
 
static HRESULT WINAPI provideclassinfo_GetClassInfo (IProvideClassInfo *iface, ITypeInfo **ti)
 
void init_classinfo (const GUID *guid, IUnknown *outer, struct provideclassinfo *classinfo)
 
static HRESULT WINAPI ClassFactory_QueryInterface (IClassFactory *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ClassFactory_AddRef (IClassFactory *iface)
 
static ULONG WINAPI ClassFactory_Release (IClassFactory *iface)
 
static HRESULT WINAPI ClassFactory_LockServer (IClassFactory *iface, BOOL fLock)
 
BOOL WINAPI DllMain (HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 

Variables

static ITypeLib * typelib
 
static ITypeInfo * typeinfos [LAST_tid]
 
static REFIID tid_ids []
 
static const IProvideClassInfoVtbl provideclassinfovtbl
 
static const IClassFactoryVtbl WshShellFactoryVtbl
 
static const IClassFactoryVtbl WshNetworkFactoryVtbl
 
static IClassFactory WshShellFactory = { &WshShellFactoryVtbl }
 
static IClassFactory WshNetworkFactory = { &WshNetworkFactoryVtbl }
 

Function Documentation

◆ ClassFactory_AddRef()

static ULONG WINAPI ClassFactory_AddRef ( IClassFactory *  iface)
static

Definition at line 187 of file wshom_main.c.

188{
189 TRACE("(%p)\n", iface);
190 return 2;
191}
#define TRACE(s)
Definition: solgame.cpp:4

◆ ClassFactory_LockServer()

static HRESULT WINAPI ClassFactory_LockServer ( IClassFactory *  iface,
BOOL  fLock 
)
static

Definition at line 199 of file wshom_main.c.

200{
201 TRACE("(%p)->(%x)\n", iface, fLock);
202 return S_OK;
203}
#define S_OK
Definition: intsafe.h:52

◆ ClassFactory_QueryInterface()

static HRESULT WINAPI ClassFactory_QueryInterface ( IClassFactory *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 166 of file wshom_main.c.

167{
168 *ppv = NULL;
169
171 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
172 *ppv = iface;
173 }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
174 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
175 *ppv = iface;
176 }
177
178 if(*ppv) {
179 IUnknown_AddRef((IUnknown*)*ppv);
180 return S_OK;
181 }
182
183 WARN("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
184 return E_NOINTERFACE;
185}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ ClassFactory_Release()

static ULONG WINAPI ClassFactory_Release ( IClassFactory *  iface)
static

Definition at line 193 of file wshom_main.c.

194{
195 TRACE("(%p)\n", iface);
196 return 1;
197}

◆ DllGetClassObject()

HRESULT WINAPI DllGetClassObject ( REFCLSID  rclsid,
REFIID  riid,
LPVOID *  ppv 
)

Definition at line 248 of file wshom_main.c.

249{
250 if(IsEqualGUID(&CLSID_WshShell, rclsid)) {
251 TRACE("(CLSID_WshShell %s %p)\n", debugstr_guid(riid), ppv);
252 return IClassFactory_QueryInterface(&WshShellFactory, riid, ppv);
253 }
254 else if(IsEqualGUID(&CLSID_WshNetwork, rclsid)) {
255 TRACE("(CLSID_WshNetwork %s %p)\n", debugstr_guid(riid), ppv);
256 return IClassFactory_QueryInterface(&WshNetworkFactory, riid, ppv);
257 }
258
259 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
261}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772
static IClassFactory WshNetworkFactory
Definition: wshom_main.c:222
static IClassFactory WshShellFactory
Definition: wshom_main.c:221

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hInstDLL,
DWORD  fdwReason,
LPVOID  lpv 
)

Definition at line 227 of file wshom_main.c.

228{
229 TRACE("%p, %ld, %p.\n", hInstDLL, fdwReason, lpv);
230
231 switch(fdwReason)
232 {
235 break;
237 if (lpv) break;
239 break;
240 }
241
242 return TRUE;
243}
static DWORD const fdwReason
#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
static void release_typelib(void)
Definition: wshom_main.c:102

◆ get_typeinfo()

HRESULT get_typeinfo ( tid_t  tid,
ITypeInfo **  typeinfo 
)

Definition at line 76 of file wshom_main.c.

77{
79
80 if (FAILED(hres = load_typelib()))
81 return hres;
82
83 if(!typeinfos[tid]) {
84 ITypeInfo *ti;
85
86 hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti);
87 if(FAILED(hres)) {
88 ERR("GetTypeInfoOfGuid(%s) failed: %#lx.\n", debugstr_guid(tid_ids[tid]), hres);
89 return hres;
90 }
91
93 ITypeInfo_Release(ti);
94 }
95
97 ITypeInfo_AddRef(*typeinfo);
98 return S_OK;
99}
#define ERR(fmt,...)
Definition: precomp.h:57
static TfClientId tid
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hres
Definition: protocol.c:432
static HRESULT load_typelib(void)
Definition: wshom_main.c:47
static REFIID tid_ids[]
Definition: wshom_main.c:37
static ITypeInfo * typeinfos[LAST_tid]
Definition: wshom_main.c:35

◆ get_typeinfo_of_guid()

static HRESULT get_typeinfo_of_guid ( const GUID *  guid,
ITypeInfo **  tinfo 
)
static

Definition at line 66 of file wshom_main.c.

67{
69
70 if(FAILED(hres = load_typelib()))
71 return hres;
72
73 return ITypeLib_GetTypeInfoOfGuid(typelib, guid, tinfo);
74}
GUID guid
Definition: version.c:147

Referenced by provideclassinfo_GetClassInfo().

◆ impl_from_IProvideClassInfo()

static struct provideclassinfo * impl_from_IProvideClassInfo ( IProvideClassInfo *  iface)
inlinestatic

Definition at line 29 of file wshom_main.c.

30{
31 return CONTAINING_RECORD(iface, struct provideclassinfo, IProvideClassInfo_iface);
32}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by provideclassinfo_AddRef(), provideclassinfo_GetClassInfo(), provideclassinfo_QueryInterface(), and provideclassinfo_Release().

◆ init_classinfo()

void init_classinfo ( const GUID *  guid,
IUnknown *  outer,
struct provideclassinfo *  classinfo 
)

Definition at line 159 of file wshom_main.c.

160{
161 classinfo->IProvideClassInfo_iface.lpVtbl = &provideclassinfovtbl;
162 classinfo->outer = outer;
163 classinfo->guid = guid;
164}
static IUnknown * outer
Definition: compobj.c:82
static const IProvideClassInfoVtbl provideclassinfovtbl
Definition: wshom_main.c:152

◆ load_typelib()

static HRESULT load_typelib ( void  )
static

Definition at line 47 of file wshom_main.c.

48{
50 ITypeLib *tl;
51
52 if(typelib)
53 return S_OK;
54
55 hres = LoadRegTypeLib(&LIBID_IWshRuntimeLibrary, 1, 0, LOCALE_SYSTEM_DEFAULT, &tl);
56 if(FAILED(hres)) {
57 ERR("LoadRegTypeLib failed: %#lx.\n", hres);
58 return hres;
59 }
60
62 ITypeLib_Release(tl);
63 return hres;
64}
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:507
#define LOCALE_SYSTEM_DEFAULT

Referenced by get_typeinfo(), and get_typeinfo_of_guid().

◆ provideclassinfo_AddRef()

static ULONG WINAPI provideclassinfo_AddRef ( IProvideClassInfo *  iface)
static

Definition at line 131 of file wshom_main.c.

132{
134 return IUnknown_AddRef(This->outer);
135}
static struct provideclassinfo * impl_from_IProvideClassInfo(IProvideClassInfo *iface)
Definition: wshom_main.c:29

◆ provideclassinfo_GetClassInfo()

static HRESULT WINAPI provideclassinfo_GetClassInfo ( IProvideClassInfo *  iface,
ITypeInfo **  ti 
)
static

Definition at line 143 of file wshom_main.c.

144{
146
147 TRACE("(%p)->(%p)\n", This, ti);
148
149 return get_typeinfo_of_guid(This->guid, ti);
150}
static HRESULT get_typeinfo_of_guid(const GUID *guid, ITypeInfo **tinfo)
Definition: wshom_main.c:66

◆ provideclassinfo_QueryInterface()

static HRESULT WINAPI provideclassinfo_QueryInterface ( IProvideClassInfo *  iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 116 of file wshom_main.c.

117{
119
120 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
121
123 *obj = iface;
124 IProvideClassInfo_AddRef(iface);
125 return S_OK;
126 }
127 else
128 return IUnknown_QueryInterface(This->outer, riid, obj);
129}
const GUID IID_IProvideClassInfo
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ provideclassinfo_Release()

static ULONG WINAPI provideclassinfo_Release ( IProvideClassInfo *  iface)
static

Definition at line 137 of file wshom_main.c.

138{
140 return IUnknown_Release(This->outer);
141}

◆ release_typelib()

static void release_typelib ( void  )
static

Definition at line 102 of file wshom_main.c.

103{
104 unsigned i;
105
106 if(!typelib)
107 return;
108
109 for(i = 0; i < ARRAY_SIZE(typeinfos); i++)
110 if(typeinfos[i])
111 ITypeInfo_Release(typeinfos[i]);
112
113 ITypeLib_Release(typelib);
114}
#define ARRAY_SIZE(A)
Definition: main.h:20
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

Referenced by DllMain().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( wshom  )

Variable Documentation

◆ provideclassinfovtbl

const IProvideClassInfoVtbl provideclassinfovtbl
static
Initial value:
= {
}
static ULONG WINAPI provideclassinfo_Release(IProvideClassInfo *iface)
Definition: wshom_main.c:137
static HRESULT WINAPI provideclassinfo_QueryInterface(IProvideClassInfo *iface, REFIID riid, void **obj)
Definition: wshom_main.c:116
static ULONG WINAPI provideclassinfo_AddRef(IProvideClassInfo *iface)
Definition: wshom_main.c:131
static HRESULT WINAPI provideclassinfo_GetClassInfo(IProvideClassInfo *iface, ITypeInfo **ti)
Definition: wshom_main.c:143

Definition at line 152 of file wshom_main.c.

Referenced by init_classinfo().

◆ tid_ids

REFIID tid_ids[]
static
Initial value:
= {
&IID_IWshCollection,
&IID_IWshEnvironment,
&IID_IWshExec,
&IID_IWshShell3,
&IID_IWshShortcut,
&IID_IWshNetwork2
}
#define IID_NULL
Definition: guiddef.h:98

Definition at line 37 of file wshom_main.c.

Referenced by get_typeinfo().

◆ typeinfos

ITypeInfo* typeinfos[LAST_tid]
static

Definition at line 35 of file wshom_main.c.

Referenced by get_typeinfo(), and release_typelib().

◆ typelib

ITypeLib* typelib
static

Definition at line 34 of file wshom_main.c.

◆ WshNetworkFactory

IClassFactory WshNetworkFactory = { &WshNetworkFactoryVtbl }
static

Definition at line 222 of file wshom_main.c.

Referenced by DllGetClassObject().

◆ WshNetworkFactoryVtbl

const IClassFactoryVtbl WshNetworkFactoryVtbl
static
Initial value:
= {
}
HRESULT WINAPI WshNetworkFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: network.c:287
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
Definition: wshom_main.c:199
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: wshom_main.c:193
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: wshom_main.c:166
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: wshom_main.c:187

Definition at line 213 of file wshom_main.c.

◆ WshShellFactory

IClassFactory WshShellFactory = { &WshShellFactoryVtbl }
static

Definition at line 221 of file wshom_main.c.

Referenced by DllGetClassObject().

◆ WshShellFactoryVtbl

const IClassFactoryVtbl WshShellFactoryVtbl
static
Initial value:
= {
}
HRESULT WINAPI WshShellFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: shell.c:1916

Definition at line 205 of file wshom_main.c.