ReactOS 0.4.16-dev-2216-ga08d639
factory.c File Reference
#include <stdarg.h>
#include <libxml/parser.h>
#include <libxml/xmlerror.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "ole2.h"
#include "msxml.h"
#include "msxml2.h"
#include "xmlparser.h"
#include "wine/debug.h"
#include "msxml_private.h"
Include dependency graph for factory.c:

Go to the source code of this file.

Classes

struct  clsid_version_t
 
class  ClassFactory
 
struct  DOMFactory
 

Macros

#define COBJMACROS
 

Typedefs

typedef HRESULT(* ClassFactoryCreateInstanceFunc) (void **)
 
typedef HRESULT(* DOMFactoryCreateInstanceFunc) (MSXML_VERSION, void **)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msxml)
 
static MSXML_VERSION get_msxml_version (const GUID *clsid)
 
static ClassFactoryClassFactory_from_IClassFactory (IClassFactory *iface)
 
static HRESULT WINAPI ClassFactory_QueryInterface (IClassFactory *iface, REFIID riid, void **ppobj)
 
static ULONG WINAPI ClassFactory_AddRef (IClassFactory *iface)
 
static ULONG WINAPI ClassFactory_Release (IClassFactory *iface)
 
static HRESULT WINAPI ClassFactory_CreateInstance (IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppobj)
 
static HRESULT WINAPI ClassFactory_LockServer (IClassFactory *iface, BOOL dolock)
 
static DOMFactoryDOMFactory_from_IClassFactory (IClassFactory *iface)
 
static ULONG WINAPI DOMClassFactory_AddRef (IClassFactory *iface)
 
static ULONG WINAPI DOMClassFactory_Release (IClassFactory *iface)
 
static HRESULT WINAPI DOMClassFactory_CreateInstance (IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppobj)
 
static HRESULT DOMClassFactory_Create (const GUID *clsid, REFIID riid, void **ppv, DOMFactoryCreateInstanceFunc fnCreateInstance)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, void **ppv)
 

Variables

GUID CLSID_XMLSchemaCache60
 
static const struct clsid_version_t clsid_versions_table []
 
static const struct IClassFactoryVtbl ClassFactoryVtbl
 
static const struct IClassFactoryVtbl DOMClassFactoryVtbl
 
static ClassFactory xmldoccf = { { &ClassFactoryVtbl }, XMLDocument_create }
 
static ClassFactory httpreqcf = { { &ClassFactoryVtbl }, XMLHTTPRequest_create }
 
static ClassFactory serverhttp = { { &ClassFactoryVtbl }, ServerXMLHTTP_create }
 
static ClassFactory xsltemplatecf = { { &ClassFactoryVtbl }, XSLTemplate_create }
 
static ClassFactory mxnsmanagercf = { {&ClassFactoryVtbl }, MXNamespaceManager_create }
 
static ClassFactory xmlparsercf = { { &ClassFactoryVtbl }, XMLParser_create }
 
static ClassFactory xmlviewcf = { { &ClassFactoryVtbl }, XMLView_create }
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file factory.c.

Typedef Documentation

◆ ClassFactoryCreateInstanceFunc

typedef HRESULT(* ClassFactoryCreateInstanceFunc) (void **)

Definition at line 50 of file factory.c.

◆ DOMFactoryCreateInstanceFunc

typedef HRESULT(* DOMFactoryCreateInstanceFunc) (MSXML_VERSION, void **)

Definition at line 51 of file factory.c.

Function Documentation

◆ ClassFactory_AddRef()

static ULONG WINAPI ClassFactory_AddRef ( IClassFactory iface)
static

Definition at line 151 of file factory.c.

152{
153 return 2;
154}

◆ ClassFactory_CreateInstance()

static HRESULT WINAPI ClassFactory_CreateInstance ( IClassFactory iface,
IUnknown pOuter,
REFIID  riid,
void **  ppobj 
)
static

Definition at line 161 of file factory.c.

166{
168 IUnknown *punk;
169 HRESULT r;
170
171 TRACE("%p %s %p\n", pOuter, debugstr_guid(riid), ppobj );
172
173 *ppobj = NULL;
174
175 if (pOuter)
177
178 r = This->pCreateInstance( (void**) &punk );
179 if (FAILED(r))
180 return r;
181
182 r = IUnknown_QueryInterface( punk, riid, ppobj );
183 IUnknown_Release( punk );
184 return r;
185}
#define NULL
Definition: types.h:112
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
REFIID riid
Definition: atlbase.h:39
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
static ClassFactory * ClassFactory_from_IClassFactory(IClassFactory *iface)
Definition: factory.c:128
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
#define TRACE(s)
Definition: solgame.cpp:4
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

◆ ClassFactory_from_IClassFactory()

static ClassFactory * ClassFactory_from_IClassFactory ( IClassFactory iface)
inlinestatic

Definition at line 128 of file factory.c.

129{
130 return CONTAINING_RECORD(iface, ClassFactory, IClassFactory_iface);
131}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by ClassFactory_CreateInstance().

◆ ClassFactory_LockServer()

static HRESULT WINAPI ClassFactory_LockServer ( IClassFactory iface,
BOOL  dolock 
)
static

Definition at line 187 of file factory.c.

190{
191 FIXME("(%p)->(%d),stub!\n",iface,dolock);
192 return S_OK;
193}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define S_OK
Definition: intsafe.h:52

◆ ClassFactory_QueryInterface()

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

Definition at line 133 of file factory.c.

137{
140 {
141 IClassFactory_AddRef( iface );
142 *ppobj = iface;
143 return S_OK;
144 }
145
146 FIXME("interface %s not implemented\n", debugstr_guid(riid));
147 *ppobj = NULL;
148 return E_NOINTERFACE;
149}
const GUID IID_IUnknown
const GUID IID_IClassFactory
#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 156 of file factory.c.

157{
158 return 1;
159}

◆ DllGetClassObject()

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

Definition at line 294 of file factory.c.

295{
297
298 TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv );
299
300 if( IsEqualCLSID( rclsid, &CLSID_DOMDocument ) || /* Version indep. v 2.x */
301 IsEqualCLSID( rclsid, &CLSID_DOMDocument2 ) || /* Version indep. v 3.0 */
302 IsEqualCLSID( rclsid, &CLSID_DOMDocument26 )|| /* Version dep. v 2.6 */
303 IsEqualCLSID( rclsid, &CLSID_DOMDocument30 )|| /* Version dep. v 3.0 */
304 IsEqualCLSID( rclsid, &CLSID_DOMDocument40 )|| /* Version dep. v 4.0 */
305 IsEqualCLSID( rclsid, &CLSID_DOMDocument60 )) /* Version dep. v 6.0 */
306 {
308 }
309 else if( IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache ) ||
310 IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache26 ) ||
311 IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache30 ) ||
312 IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache40 ) ||
314 {
316 }
317 else if( IsEqualCLSID( rclsid, &CLSID_XMLDocument ) )
318 {
320 }
321 else if( IsEqualCLSID( rclsid, &CLSID_DOMFreeThreadedDocument ) || /* Version indep. v 2.x */
322 IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument ) ||
323 IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument26 ) ||
324 IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument30 ) ||
325 IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument40 ) ||
326 IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument60 ))
327 {
329 }
330 else if( IsEqualCLSID( rclsid, &CLSID_SAXXMLReader) ||
331 IsEqualCLSID( rclsid, &CLSID_SAXXMLReader30 ) ||
332 IsEqualCLSID( rclsid, &CLSID_SAXXMLReader40 ) ||
333 IsEqualCLSID( rclsid, &CLSID_SAXXMLReader60 ))
334 {
336 }
337 else if( IsEqualCLSID( rclsid, &CLSID_XMLHTTPRequest ) ||
338 IsEqualCLSID( rclsid, &CLSID_XMLHTTP) ||
339 IsEqualCLSID( rclsid, &CLSID_XMLHTTP26 ) ||
340 IsEqualCLSID( rclsid, &CLSID_XMLHTTP30 ) ||
341 IsEqualCLSID( rclsid, &CLSID_XMLHTTP40 ) ||
342 IsEqualCLSID( rclsid, &CLSID_XMLHTTP60 ))
343 {
345 }
346 else if( IsEqualCLSID( rclsid, &CLSID_ServerXMLHTTP ) ||
347 IsEqualCLSID( rclsid, &CLSID_ServerXMLHTTP30 ) ||
348 IsEqualCLSID( rclsid, &CLSID_ServerXMLHTTP40 ) ||
349 IsEqualCLSID( rclsid, &CLSID_ServerXMLHTTP60 ))
350 {
351 cf = &serverhttp.IClassFactory_iface;
352 }
353 else if( IsEqualCLSID( rclsid, &CLSID_XSLTemplate ) ||
354 IsEqualCLSID( rclsid, &CLSID_XSLTemplate26 ) ||
355 IsEqualCLSID( rclsid, &CLSID_XSLTemplate30 ) ||
356 IsEqualCLSID( rclsid, &CLSID_XSLTemplate40 ) ||
357 IsEqualCLSID( rclsid, &CLSID_XSLTemplate60 ))
358 {
360 }
361 else if( IsEqualCLSID( rclsid, &CLSID_MXXMLWriter ) ||
362 IsEqualCLSID( rclsid, &CLSID_MXXMLWriter30 ) ||
363 IsEqualCLSID( rclsid, &CLSID_MXXMLWriter40 ) ||
364 IsEqualCLSID( rclsid, &CLSID_MXXMLWriter60 ) )
365 {
367 }
368 else if( IsEqualCLSID( rclsid, &CLSID_SAXAttributes) ||
369 IsEqualCLSID( rclsid, &CLSID_SAXAttributes30 ) ||
370 IsEqualCLSID( rclsid, &CLSID_SAXAttributes40 ) ||
371 IsEqualCLSID( rclsid, &CLSID_SAXAttributes60 ))
372 {
374 }
375 else if( IsEqualCLSID( rclsid, &CLSID_MXNamespaceManager ) ||
376 IsEqualCLSID( rclsid, &CLSID_MXNamespaceManager40 ) ||
377 IsEqualCLSID( rclsid, &CLSID_MXNamespaceManager60 ) )
378 {
380 }
381 else if( IsEqualCLSID( rclsid, &CLSID_XMLParser ) ||
382 IsEqualCLSID( rclsid, &CLSID_XMLParser26 ) ||
383 IsEqualCLSID( rclsid, &CLSID_XMLParser30 ) )
384 {
386 }
387 else if( IsEqualCLSID( rclsid, &CLSID_XMLView ) )
388 {
390 }
391
392 if ( !cf )
394
395 return IClassFactory_QueryInterface( cf, riid, ppv );
396}
HRESULT dom_document_create(MSXML_VERSION version, void **ppObj)
Definition: domdoc.c:3788
REFIID LPVOID * ppv
Definition: atlbase.h:39
static ClassFactory xmlparsercf
Definition: factory.c:288
static ClassFactory mxnsmanagercf
Definition: factory.c:287
GUID CLSID_XMLSchemaCache60
static ClassFactory xmldoccf
Definition: factory.c:283
static ClassFactory xmlviewcf
Definition: factory.c:289
static HRESULT DOMClassFactory_Create(const GUID *clsid, REFIID riid, void **ppv, DOMFactoryCreateInstanceFunc fnCreateInstance)
Definition: factory.c:265
static ClassFactory xsltemplatecf
Definition: factory.c:286
static ClassFactory httpreqcf
Definition: factory.c:284
const struct _GUID CLSID_DOMDocument
const struct _GUID CLSID_DOMFreeThreadedDocument
const struct _GUID CLSID_XMLDocument
const struct _GUID CLSID_XMLHTTPRequest
HRESULT SAXXMLReader_create(MSXML_VERSION, void **)
HRESULT SAXAttributes_create(MSXML_VERSION, void **)
Definition: mxwriter.c:3555
HRESULT MXWriter_create(MSXML_VERSION, void **)
Definition: mxwriter.c:2590
HRESULT SchemaCache_create(MSXML_VERSION, void **)
Definition: schema.c:1601
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
IClassFactory IClassFactory_iface
Definition: main.c:210
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

◆ DOMClassFactory_AddRef()

static ULONG WINAPI DOMClassFactory_AddRef ( IClassFactory iface)
static

Definition at line 200 of file factory.c.

201{
204 TRACE("%p, refcount %lu.\n", iface, ref);
205 return ref;
206}
#define InterlockedIncrement
Definition: armddk.h:53
static DOMFactory * DOMFactory_from_IClassFactory(IClassFactory *iface)
Definition: factory.c:195
Definition: main.c:439
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ DOMClassFactory_Create()

static HRESULT DOMClassFactory_Create ( const GUID clsid,
REFIID  riid,
void **  ppv,
DOMFactoryCreateInstanceFunc  fnCreateInstance 
)
static

Definition at line 265 of file factory.c.

266{
267 DOMFactory *ret = malloc(sizeof(DOMFactory));
269
270 ret->IClassFactory_iface.lpVtbl = &DOMClassFactoryVtbl;
271 ret->ref = 0;
272 ret->version = get_msxml_version(clsid);
273 ret->pCreateInstance = fnCreateInstance;
274
275 hres = IClassFactory_QueryInterface(&ret->IClassFactory_iface, riid, ppv);
276 if(FAILED(hres)) {
277 free(ret);
278 *ppv = NULL;
279 }
280 return hres;
281}
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
return ret
Definition: mutex.c:146
HRESULT(* fnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj)
Definition: hnetcfg.c:37
HRESULT hres
Definition: protocol.c:465
const CLSID * clsid
Definition: msctf.cpp:50
static const struct IClassFactoryVtbl DOMClassFactoryVtbl
Definition: factory.c:256
static MSXML_VERSION get_msxml_version(const GUID *clsid)
Definition: factory.c:99

Referenced by DllGetClassObject().

◆ DOMClassFactory_CreateInstance()

static HRESULT WINAPI DOMClassFactory_CreateInstance ( IClassFactory iface,
IUnknown pOuter,
REFIID  riid,
void **  ppobj 
)
static

Definition at line 221 of file factory.c.

226{
228 IUnknown *punk;
229 HRESULT r;
230
231 TRACE("%p %s %p\n", pOuter, debugstr_guid(riid), ppobj );
232
233 *ppobj = NULL;
234
235 if (pOuter)
237
238 r = This->pCreateInstance( This->version, (void**) &punk );
239 if (FAILED(r))
240 return r;
241
242 r = IUnknown_QueryInterface( punk, riid, ppobj );
243 IUnknown_Release( punk );
244 return r;
245}

◆ DOMClassFactory_Release()

static ULONG WINAPI DOMClassFactory_Release ( IClassFactory iface)
static

Definition at line 208 of file factory.c.

209{
212
213 TRACE("%p, refcount %lu.\n", iface, ref);
214
215 if (!ref)
216 free(factory);
217
218 return ref;
219}
#define InterlockedDecrement
Definition: armddk.h:52

◆ DOMFactory_from_IClassFactory()

static DOMFactory * DOMFactory_from_IClassFactory ( IClassFactory iface)
inlinestatic

Definition at line 195 of file factory.c.

196{
197 return CONTAINING_RECORD(iface, DOMFactory, IClassFactory_iface);
198}

Referenced by DOMClassFactory_AddRef(), DOMClassFactory_CreateInstance(), and DOMClassFactory_Release().

◆ get_msxml_version()

static MSXML_VERSION get_msxml_version ( const GUID clsid)
static

Definition at line 99 of file factory.c.

100{
101 unsigned int i;
102
103 for (i = 0; i < ARRAY_SIZE(clsid_versions_table); i++)
106
107 ERR("unknown clsid=%s\n", debugstr_guid(clsid));
108 return MSXML_DEFAULT;
109}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define ERR(fmt,...)
Definition: precomp.h:57
static const WCHAR version[]
Definition: asmname.c:66
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
static const struct clsid_version_t clsid_versions_table[]
Definition: factory.c:59
@ MSXML_DEFAULT
Definition: msxml_dispex.h:28

Referenced by DOMClassFactory_Create().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msxml  )

Variable Documentation

◆ ClassFactoryVtbl

const struct IClassFactoryVtbl ClassFactoryVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppobj)
Definition: factory.c:161
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock)
Definition: factory.c:187
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: factory.c:156
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: factory.c:151
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppobj)
Definition: factory.c:133

Definition at line 247 of file factory.c.

◆ clsid_versions_table

const struct clsid_version_t clsid_versions_table[]
static

Definition at line 59 of file factory.c.

Referenced by get_msxml_version().

◆ CLSID_XMLSchemaCache60

GUID CLSID_XMLSchemaCache60
extern

◆ DOMClassFactoryVtbl

const struct IClassFactoryVtbl DOMClassFactoryVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI DOMClassFactory_CreateInstance(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppobj)
Definition: factory.c:221
static ULONG WINAPI DOMClassFactory_Release(IClassFactory *iface)
Definition: factory.c:208
static ULONG WINAPI DOMClassFactory_AddRef(IClassFactory *iface)
Definition: factory.c:200

Definition at line 256 of file factory.c.

Referenced by DOMClassFactory_Create().

◆ httpreqcf

ClassFactory httpreqcf = { { &ClassFactoryVtbl }, XMLHTTPRequest_create }
static

Definition at line 284 of file factory.c.

Referenced by DllGetClassObject().

◆ mxnsmanagercf

ClassFactory mxnsmanagercf = { {&ClassFactoryVtbl }, MXNamespaceManager_create }
static

Definition at line 287 of file factory.c.

Referenced by DllGetClassObject().

◆ serverhttp

Definition at line 285 of file factory.c.

◆ xmldoccf

ClassFactory xmldoccf = { { &ClassFactoryVtbl }, XMLDocument_create }
static

Definition at line 283 of file factory.c.

Referenced by DllGetClassObject().

◆ xmlparsercf

ClassFactory xmlparsercf = { { &ClassFactoryVtbl }, XMLParser_create }
static

Definition at line 288 of file factory.c.

Referenced by DllGetClassObject().

◆ xmlviewcf

ClassFactory xmlviewcf = { { &ClassFactoryVtbl }, XMLView_create }
static

Definition at line 289 of file factory.c.

Referenced by DllGetClassObject().

◆ xsltemplatecf

ClassFactory xsltemplatecf = { { &ClassFactoryVtbl }, XSLTemplate_create }
static

Definition at line 286 of file factory.c.

Referenced by DllGetClassObject().