ReactOS 0.4.17-dev-966-gf06eace
scrrun.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "ole2.h"
#include "olectl.h"
#include "rpcproxy.h"
#include <initguid.h>
#include "scrrun.h"
#include "scrrun_private.h"
#include "wine/debug.h"
Include dependency graph for scrrun.c:

Go to the source code of this file.

Macros

#define COBJMACROS
 

Typedefs

typedef HRESULT(* fnCreateInstance) (LPVOID *ppObj)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (scrrun)
 
static struct provideclassinfo * impl_from_IProvideClassInfo (IProvideClassInfo *iface)
 
static HRESULT WINAPI scrruncf_QueryInterface (IClassFactory *iface, REFIID riid, LPVOID *ppv)
 
static ULONG WINAPI scrruncf_AddRef (IClassFactory *iface)
 
static ULONG WINAPI scrruncf_Release (IClassFactory *iface)
 
static HRESULT WINAPI scrruncf_LockServer (IClassFactory *iface, BOOL fLock)
 
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)
 
BOOL WINAPI DllMain (HINSTANCE hinst, DWORD reason, LPVOID reserved)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 

Variables

static const struct IClassFactoryVtbl scrruncf_vtbl
 
static const struct IClassFactoryVtbl dictcf_vtbl
 
static IClassFactory FileSystemFactory = { &scrruncf_vtbl }
 
static IClassFactory DictionaryFactory = { &dictcf_vtbl }
 
static ITypeLib * typelib
 
static ITypeInfo * typeinfos [LAST_tid]
 
static REFIID tid_ids []
 
static const IProvideClassInfoVtbl provideclassinfovtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 18 of file scrrun.c.

Typedef Documentation

◆ fnCreateInstance

typedef HRESULT(* fnCreateInstance) (LPVOID *ppObj)

Definition at line 41 of file scrrun.c.

Function Documentation

◆ DllGetClassObject()

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

Definition at line 258 of file scrrun.c.

259{
260 if(IsEqualGUID(&CLSID_FileSystemObject, rclsid)) {
261 TRACE("(CLSID_FileSystemObject %s %p)\n", debugstr_guid(riid), ppv);
262 return IClassFactory_QueryInterface(&FileSystemFactory, riid, ppv);
263 }
264 else if(IsEqualGUID(&CLSID_Dictionary, rclsid)) {
265 TRACE("(CLSID_Dictionary %s %p)\n", debugstr_guid(riid), ppv);
266 return IClassFactory_QueryInterface(&DictionaryFactory, riid, ppv);
267 }
268
269 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
271}
#define FIXME(fmt,...)
Definition: precomp.h:53
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
static IClassFactory FileSystemFactory
Definition: scrrun.c:100
static IClassFactory DictionaryFactory
Definition: scrrun.c:101
#define TRACE(s)
Definition: solgame.cpp:4
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hinst,
DWORD  reason,
LPVOID  reserved 
)

Definition at line 237 of file scrrun.c.

238{
239 TRACE("%p, %lu, %p\n", hinst, reason, reserved);
240
241 switch (reason)
242 {
245 break;
247 if (reserved) break;
249 break;
250 }
251 return TRUE;
252}
#define TRUE
Definition: types.h:120
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1971
#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
r reserved
Definition: btrfs.c:3006
static HINSTANCE hinst
Definition: edit.c:551
static void release_typelib(void)
Definition: scrrun.c:173

◆ get_typeinfo()

HRESULT get_typeinfo ( tid_t  tid,
ITypeInfo **  typeinfo 
)

Definition at line 148 of file scrrun.c.

149{
151
152 if (FAILED(hres = load_typelib()))
153 return hres;
154
155 if(!typeinfos[tid]) {
156 ITypeInfo *ti;
157
158 hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti);
159 if(FAILED(hres)) {
160 ERR("GetTypeInfoOfGuid(%s) failed: %#lx.\n", debugstr_guid(tid_ids[tid]), hres);
161 return hres;
162 }
163
165 ITypeInfo_Release(ti);
166 }
167
169 ITypeInfo_AddRef(typeinfos[tid]);
170 return S_OK;
171}
#define ERR(fmt,...)
Definition: precomp.h:57
#define NULL
Definition: types.h:112
static TfClientId tid
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hres
Definition: protocol.c:432
static HRESULT load_typelib(void)
Definition: scrrun.c:119
static REFIID tid_ids[]
Definition: scrrun.c:106
static ITypeInfo * typeinfos[LAST_tid]
Definition: scrrun.c:104

◆ get_typeinfo_of_guid()

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

Definition at line 138 of file scrrun.c.

139{
141
142 if(FAILED(hres = load_typelib()))
143 return hres;
144
145 return ITypeLib_GetTypeInfoOfGuid(typelib, guid, tinfo);
146}
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 36 of file scrrun.c.

37{
38 return CONTAINING_RECORD(iface, struct provideclassinfo, IProvideClassInfo_iface);
39}
#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 
)

◆ load_typelib()

static HRESULT load_typelib ( void  )
static

Definition at line 119 of file scrrun.c.

120{
122 ITypeLib *tl;
123
124 if(typelib)
125 return S_OK;
126
127 hres = LoadRegTypeLib(&LIBID_Scripting, 1, 0, LOCALE_SYSTEM_DEFAULT, &tl);
128 if(FAILED(hres)) {
129 ERR("LoadRegTypeLib failed: %#lx.\n", hres);
130 return hres;
131 }
132
134 ITypeLib_Release(tl);
135 return hres;
136}
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 202 of file scrrun.c.

203{
205 return IUnknown_AddRef(This->outer);
206}
static struct provideclassinfo * impl_from_IProvideClassInfo(IProvideClassInfo *iface)
Definition: scrrun.c:36

◆ provideclassinfo_GetClassInfo()

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

Definition at line 214 of file scrrun.c.

215{
217
218 TRACE("(%p)->(%p)\n", This, ti);
219
220 return get_typeinfo_of_guid(This->guid, ti);
221}
static HRESULT get_typeinfo_of_guid(const GUID *guid, ITypeInfo **tinfo)
Definition: scrrun.c:138

◆ provideclassinfo_QueryInterface()

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

Definition at line 187 of file scrrun.c.

188{
190
191 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
192
194 *obj = iface;
195 IProvideClassInfo_AddRef(iface);
196 return S_OK;
197 }
198 else
199 return IUnknown_QueryInterface(This->outer, riid, obj);
200}
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 208 of file scrrun.c.

209{
211 return IUnknown_Release(This->outer);
212}

◆ release_typelib()

static void release_typelib ( void  )
static

Definition at line 173 of file scrrun.c.

174{
175 unsigned i;
176
177 if(!typelib)
178 return;
179
180 for (i = 0; i < ARRAY_SIZE(typeinfos); i++)
181 if(typeinfos[i])
182 ITypeInfo_Release(typeinfos[i]);
183
184 ITypeLib_Release(typelib);
185}
#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().

◆ scrruncf_AddRef()

static ULONG WINAPI scrruncf_AddRef ( IClassFactory *  iface)
static

Definition at line 64 of file scrrun.c.

65{
66 TRACE("(%p)\n", iface);
67 return 2;
68}

◆ scrruncf_LockServer()

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

Definition at line 76 of file scrrun.c.

77{
78 TRACE("(%p)->(%x)\n", iface, fLock);
79 return S_OK;
80}

◆ scrruncf_QueryInterface()

static HRESULT WINAPI scrruncf_QueryInterface ( IClassFactory *  iface,
REFIID  riid,
LPVOID *  ppv 
)
static

Definition at line 43 of file scrrun.c.

44{
45 *ppv = NULL;
46
48 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
49 *ppv = iface;
51 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
52 *ppv = iface;
53 }
54
55 if(*ppv) {
56 IUnknown_AddRef((IUnknown*)*ppv);
57 return S_OK;
58 }
59
60 WARN("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
61 return E_NOINTERFACE;
62}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ scrruncf_Release()

static ULONG WINAPI scrruncf_Release ( IClassFactory *  iface)
static

Definition at line 70 of file scrrun.c.

71{
72 TRACE("(%p)\n", iface);
73 return 1;
74}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( scrrun  )

Variable Documentation

◆ dictcf_vtbl

const struct IClassFactoryVtbl dictcf_vtbl
static
Initial value:
=
{
}
HRESULT WINAPI Dictionary_CreateInstance(IClassFactory *factory, IUnknown *outer, REFIID riid, void **ret)
Definition: dictionary.c:972
static HRESULT WINAPI scrruncf_LockServer(IClassFactory *iface, BOOL fLock)
Definition: scrrun.c:76
static HRESULT WINAPI scrruncf_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppv)
Definition: scrrun.c:43
static ULONG WINAPI scrruncf_AddRef(IClassFactory *iface)
Definition: scrrun.c:64
static ULONG WINAPI scrruncf_Release(IClassFactory *iface)
Definition: scrrun.c:70

Definition at line 91 of file scrrun.c.

◆ DictionaryFactory

IClassFactory DictionaryFactory = { &dictcf_vtbl }
static

Definition at line 101 of file scrrun.c.

Referenced by DllGetClassObject().

◆ FileSystemFactory

IClassFactory FileSystemFactory = { &scrruncf_vtbl }
static

Definition at line 100 of file scrrun.c.

Referenced by DllGetClassObject().

◆ provideclassinfovtbl

const IProvideClassInfoVtbl provideclassinfovtbl
static
Initial value:
= {
}
static ULONG WINAPI provideclassinfo_Release(IProvideClassInfo *iface)
Definition: scrrun.c:208
static HRESULT WINAPI provideclassinfo_QueryInterface(IProvideClassInfo *iface, REFIID riid, void **obj)
Definition: scrrun.c:187
static ULONG WINAPI provideclassinfo_AddRef(IProvideClassInfo *iface)
Definition: scrrun.c:202
static HRESULT WINAPI provideclassinfo_GetClassInfo(IProvideClassInfo *iface, ITypeInfo **ti)
Definition: scrrun.c:214

Definition at line 223 of file scrrun.c.

Referenced by init_classinfo().

◆ scrruncf_vtbl

const struct IClassFactoryVtbl scrruncf_vtbl
static
Initial value:
=
{
}
HRESULT WINAPI FileSystem_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: filesystem.c:4177

Definition at line 82 of file scrrun.c.

◆ tid_ids

REFIID tid_ids[]
static
Initial value:
= {
&IID_IDictionary,
&IID_IDrive,
&IID_IDriveCollection,
&IID_IFile,
&IID_IFileCollection,
&IID_IFileSystem3,
&IID_IFolder,
&IID_IFolderCollection,
&IID_ITextStream
}
#define IID_NULL
Definition: guiddef.h:98

Definition at line 106 of file scrrun.c.

Referenced by get_typeinfo().

◆ typeinfos

ITypeInfo* typeinfos[LAST_tid]
static

Definition at line 104 of file scrrun.c.

Referenced by get_typeinfo(), and release_typelib().

◆ typelib

ITypeLib* typelib
static

Definition at line 103 of file scrrun.c.