ReactOS 0.4.17-dev-357-ga8f14ff
jscript_main.c
Go to the documentation of this file.
1/*
2 * Copyright 2008 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 "initguid.h"
20
21#include "jscript.h"
22
23#include "winreg.h"
24#include "advpub.h"
25#include "activaut.h"
26#include "objsafe.h"
27#include "mshtmhst.h"
28#include "rpcproxy.h"
29#include "jscript_classes.h"
30#include "jsdisp.h"
31
32#include "wine/debug.h"
33
35
37
38DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
39
43
44static int weak_refs_compare(const void *key, const struct rb_entry *entry)
45{
48 return (a > b) - (a < b);
49}
50
52{
54
55 if(!thread_data) {
56 thread_data = calloc(1, sizeof(struct thread_data));
57 if(!thread_data)
58 return NULL;
63 }
64
66 return thread_data;
67}
68
70{
71 if(--thread_data->ref)
72 return;
73
76}
77
79{
82 HRESULT hr;
83
85 {
87 if (FAILED(hr)) return hr;
88
89 hr = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IDispatch, &typeinfo);
90 ITypeLib_Release(typelib);
91 if (FAILED(hr)) return hr;
92
94 ITypeInfo_Release(typeinfo);
95 }
96
98 return S_OK;
99}
100
102{
103 *ppv = NULL;
104
106 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
107 *ppv = iface;
108 }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
109 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
110 *ppv = iface;
111 }
112
113 if(*ppv) {
114 IUnknown_AddRef((IUnknown*)*ppv);
115 return S_OK;
116 }
117
118 FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
119 return E_NOINTERFACE;
120}
121
123{
124 TRACE("(%p)\n", iface);
125 return 2;
126}
127
129{
130 TRACE("(%p)\n", iface);
131 return 1;
132}
133
135{
136 TRACE("(%p)->(%x)\n", iface, fLock);
137
138 if(fLock)
139 lock_module();
140 else
142
143 return S_OK;
144}
145
147 REFIID riid, void **ppv)
148{
149 TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
150
151 if(outer) {
152 *ppv = NULL;
154 }
155
157}
158
159static const IClassFactoryVtbl JScriptFactoryVtbl = {
165};
166
168
170 REFIID riid, void **ppv)
171{
172 TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
173
174 if(outer) {
175 *ppv = NULL;
177 }
178
180}
181
182static const IClassFactoryVtbl JScriptEncodeFactoryVtbl = {
188};
189
191
192/******************************************************************
193 * DllMain (jscript.@)
194 */
196{
197 TRACE("(%p %ld %p)\n", hInstDLL, fdwReason, lpv);
198
199 switch(fdwReason) {
202 jscript_hinstance = hInstDLL;
205 return FALSE;
206 break;
208 if (lpv) break;
209 if (dispatch_typeinfo) ITypeInfo_Release(dispatch_typeinfo);
211 free_strings();
212 break;
213 }
214
215 return TRUE;
216}
217
218/***********************************************************************
219 * DllGetClassObject (jscript.@)
220 */
222{
223 if(IsEqualGUID(&CLSID_JScript, rclsid)) {
224 TRACE("(CLSID_JScript %s %p)\n", debugstr_guid(riid), ppv);
225 return IClassFactory_QueryInterface(&JScriptFactory, riid, ppv);
226 }
227
228 if(IsEqualGUID(&CLSID_JScriptEncode, rclsid)) {
229 TRACE("(CLSID_JScriptEncode %s %p)\n", debugstr_guid(riid), ppv);
230 return IClassFactory_QueryInterface(&JScriptEncodeFactory, riid, ppv);
231 }
232
233 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
235}
236
237/***********************************************************************
238 * DllCanUnloadNow (jscript.@)
239 */
241{
242 TRACE("() ref=%ld\n", module_ref);
243
244 return module_ref ? S_FALSE : S_OK;
245}
static DWORD const fdwReason
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
static void list_init(struct list_entry *head)
Definition: list.h:51
#define FIXME(fmt,...)
Definition: precomp.h:53
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
HRESULT create_jscript_object(BOOL is_encode, REFIID riid, void **ppv)
Definition: jscript.c:1476
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
Definition: thread.c:1276
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1166
DWORD WINAPI DECLSPEC_HOTPATCH TlsAlloc(void)
Definition: thread.c:657
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:531
#define ULONG_PTR
Definition: config.h:101
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
static void lock_module(void)
Definition: ieframe.h:335
static void unlock_module(void)
Definition: ieframe.h:339
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
Definition: jscript_main.c:134
LONG module_ref
Definition: jscript_main.c:36
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
Definition: jscript_main.c:195
HRESULT get_dispatch_typeinfo(ITypeInfo **out)
Definition: jscript_main.c:78
static HRESULT WINAPI JScriptEncodeFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: jscript_main.c:169
static int weak_refs_compare(const void *key, const struct rb_entry *entry)
Definition: jscript_main.c:44
void release_thread_data(struct thread_data *thread_data)
Definition: jscript_main.c:69
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: jscript_main.c:128
static IClassFactory JScriptEncodeFactory
Definition: jscript_main.c:190
static const IClassFactoryVtbl JScriptEncodeFactoryVtbl
Definition: jscript_main.c:182
static ITypeInfo * dispatch_typeinfo
Definition: jscript_main.c:42
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: jscript_main.c:101
HINSTANCE jscript_hinstance
Definition: jscript_main.c:40
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: jscript_main.c:221
struct thread_data * get_thread_data(void)
Definition: jscript_main.c:51
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: jscript_main.c:122
static DWORD jscript_tls
Definition: jscript_main.c:41
HRESULT WINAPI DllCanUnloadNow(void)
Definition: jscript_main.c:240
static HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: jscript_main.c:146
static IClassFactory JScriptFactory
Definition: jscript_main.c:167
static const IClassFactoryVtbl JScriptFactoryVtbl
Definition: jscript_main.c:159
BOOL init_strings(void)
Definition: jsstr.c:320
void free_strings(void)
Definition: jsstr.c:335
#define b
Definition: ke_i.h:79
#define debugstr_guid
Definition: kernel32.h:35
#define GUID_NULL
Definition: ks.h:106
static const CLSID CLSID_JScript
Definition: activex.c:57
static const CLSID CLSID_JScriptEncode
Definition: jscript.c:55
static IUnknown * outer
Definition: compobj.c:82
#define STDOLE_MINORVERNUM
Definition: oleauto.h:31
#define STDOLE_LCID
Definition: oleauto.h:32
#define STDOLE_MAJORVERNUM
Definition: oleauto.h:30
const GUID IID_IDispatch
long LONG
Definition: pedump.c:60
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Definition: guiddef.h:68
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define calloc
Definition: rosglue.h:14
#define RB_ENTRY_VALUE(element, type, field)
Definition: rbtree.h:26
static void rb_init(struct rb_tree *tree, rb_compare_func_t compare)
Definition: rbtree.h:173
#define TRACE(s)
Definition: solgame.cpp:4
Definition: copy.c:22
Definition: rbtree.h:30
LONG thread_id
Definition: jscript.h:137
struct list objects
Definition: jscript.h:142
LONG ref
Definition: jscript.h:136
struct rb_tree weak_refs
Definition: jscript.h:143
Definition: jscript.h:378
struct list list
Definition: jscript.h:380
Definition: jscript.h:446
#define LIST_ENTRY(type)
Definition: queue.h:175
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:529
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772