ReactOS 0.4.17-dev-357-ga8f14ff
createobj.c
Go to the documentation of this file.
1/*
2 * Copyright 2009,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 <stdio.h>
20
21#define COBJMACROS
22#define CONST_VTABLE
23
24#include <ole2.h>
25#include <dispex.h>
26#include <activscp.h>
27#include <objsafe.h>
28#include <urlmon.h>
29#include <mshtmhst.h>
30
31#include "wine/test.h"
32
33#ifdef _WIN64
34
35#define IActiveScriptParse_QueryInterface IActiveScriptParse64_QueryInterface
36#define IActiveScriptParse_Release IActiveScriptParse64_Release
37#define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew
38#define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText
39#define IActiveScriptParseProcedure2_Release IActiveScriptParseProcedure2_64_Release
40
41#else
42
43#define IActiveScriptParse_QueryInterface IActiveScriptParse32_QueryInterface
44#define IActiveScriptParse_Release IActiveScriptParse32_Release
45#define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
46#define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
47#define IActiveScriptParseProcedure2_Release IActiveScriptParseProcedure2_32_Release
48
49#endif
50
51extern const CLSID CLSID_VBScript;
52
53#define VB_E_ACCESS_DENIED 0x800a0046
54
55#define DEFINE_EXPECT(func) \
56 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
57
58#define SET_EXPECT(func) \
59 expect_ ## func = TRUE
60
61#define CHECK_EXPECT2(func) \
62 do { \
63 ok(expect_ ##func, "unexpected call " #func "\n"); \
64 called_ ## func = TRUE; \
65 }while(0)
66
67#define CHECK_EXPECT(func) \
68 do { \
69 CHECK_EXPECT2(func); \
70 expect_ ## func = FALSE; \
71 }while(0)
72
73#define CHECK_CALLED(func) \
74 do { \
75 ok(called_ ## func, "expected " #func "\n"); \
76 expect_ ## func = called_ ## func = FALSE; \
77 }while(0)
78
79#define CLEAR_CALLED(func) \
80 expect_ ## func = called_ ## func = FALSE
81
83DEFINE_EXPECT(ProcessUrlAction);
84DEFINE_EXPECT(QueryCustomPolicy);
85DEFINE_EXPECT(reportSuccess);
86DEFINE_EXPECT(Host_QS_SecMgr);
87DEFINE_EXPECT(Caller_QS_SecMgr);
88DEFINE_EXPECT(QI_IObjectWithSite);
90
101
102#define TESTOBJ_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80646}"
103#define TESTOBJINST_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80647}"
104
105static const GUID CLSID_TestObj =
106 {0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}};
108 {0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x47}};
109
110/* Defined as extern in urlmon.idl, but not exported by uuid.lib */
112 {0x10200490,0xfa38,0x11d0,{0xac,0x0e,0x00,0xa0,0xc9,0xf,0xff,0xc0}};
113
114#define DISPID_TEST_REPORTSUCCESS 0x1000
115
116#define DISPID_GLOBAL_OK 0x2000
117
118#define VB_E_CANNOT_CREATE_OBJ 0x800a01ad
119
121{
122 ok(0, "unexpected call\n");
123 return E_NOTIMPL;
124}
125
127{
128 return 2;
129}
130
132{
133 return 1;
134}
135
137{
140
141
142 CHECK_EXPECT(SetSite);
143 ok(pUnkSite != NULL, "pUnkSite == NULL\n");
144
145 hres = IUnknown_QueryInterface(pUnkSite, &IID_IServiceProvider, (void**)&sp);
146 ok(hres == S_OK, "Could not get IServiceProvider iface: %08lx\n", hres);
147 IServiceProvider_Release(sp);
148
149 return SetSite_hres;
150}
151
153{
154 ok(0, "unexpected call\n");
155 return E_NOTIMPL;
156}
157
158static const IObjectWithSiteVtbl ObjectWithSiteVtbl = {
164};
165
167
169
171{
172 *ppv = NULL;
173
175 *ppv = iface;
176 }else if(IsEqualGUID(riid, &IID_IDispatch) || IsEqualGUID(riid, &IID_IDispatchEx)) {
178 return QI_IDispatch_hres;
179 *ppv = iface;
181 CHECK_EXPECT(QI_IObjectWithSite);
185 }else if(IsEqualGUID(&IID_IObjectSafety, riid)) {
186 ok(0, "Unexpected IID_IObjectSafety query\n");
187 }
188
189 return *ppv ? S_OK : E_NOINTERFACE;
190}
191
193{
194 return 2;
195}
196
198{
199 return 1;
200}
201
203{
204 ok(0, "unexpected call\n");
205 return E_NOTIMPL;
206}
207
209 LCID lcid, ITypeInfo **ppTInfo)
210{
211 return E_NOTIMPL;
212}
213
215 LPOLESTR *rgszNames, UINT cNames,
216 LCID lcid, DISPID *rgDispId)
217{
218 ok(0, "unexpected call\n");
219 return E_NOTIMPL;
220}
221
223 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
224 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
225{
226 ok(0, "unexpected call\n");
227 return E_NOTIMPL;
228}
229
231{
232 ok(0, "unexpected call %s %lx\n", wine_dbgstr_w(bstrName), grfdex);
233 return E_NOTIMPL;
234}
235
237{
238 ok(0, "unexpected call\n");
239 return E_NOTIMPL;
240}
241
243{
244 ok(0, "unexpected call\n");
245 return E_NOTIMPL;
246}
247
249{
250 ok(0, "unexpected call\n");
251 return E_NOTIMPL;
252}
253
255{
256 ok(0, "unexpected call\n");
257 return E_NOTIMPL;
258}
259
261{
262 ok(0, "unexpected call\n");
263 return E_NOTIMPL;
264}
265
266static HRESULT WINAPI Test_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
267{
268 if(!lstrcmpW(bstrName, L"reportSuccess")) {
269 ok(grfdex == fdexNameCaseInsensitive, "grfdex = %lx\n", grfdex);
271 return S_OK;
272 }
273
274 ok(0, "unexpected name %s\n", wine_dbgstr_w(bstrName));
275 return E_NOTIMPL;
276}
277
278static HRESULT WINAPI Test_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
279 VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
280{
281 switch(id) {
283 CHECK_EXPECT(reportSuccess);
284
285 ok(wFlags == INVOKE_FUNC, "wFlags = %x\n", wFlags);
286 ok(pdp != NULL, "pdp == NULL\n");
287 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
288 ok(pdp->cArgs == 0, "cArgs = %d\n", pdp->cArgs);
289 ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
290 ok(!pvarRes, "pvarRes != NULL\n");
291 ok(pei != NULL, "pei == NULL\n");
292 break;
293
294 default:
295 ok(0, "unexpected call\n");
296 return E_NOTIMPL;
297 }
298
299 return S_OK;
300}
301
302static IDispatchExVtbl testObjVtbl = {
318};
319
321
322static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
323{
324 if(!lstrcmpW(bstrName, L"ok")) {
325 ok(grfdex == fdexNameCaseSensitive, "grfdex = %lx\n", grfdex);
327 return S_OK;
328 }
329
330 ok(0, "unexpected name %s\n", wine_dbgstr_w(bstrName));
331 return E_NOTIMPL;
332}
333
334static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
335 VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
336{
337 switch(id) {
338 case DISPID_GLOBAL_OK:
339 ok(wFlags == INVOKE_FUNC || wFlags == (INVOKE_FUNC|INVOKE_PROPERTYGET), "wFlags = %x\n", wFlags);
340 ok(pdp != NULL, "pdp == NULL\n");
341 ok(pdp->rgvarg != NULL, "rgvarg == NULL\n");
342 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
343 ok(pdp->cArgs == 2, "cArgs = %d\n", pdp->cArgs);
344 ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
345 ok(pei != NULL, "pei == NULL\n");
346
347 ok(V_VT(pdp->rgvarg) == VT_BSTR, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
348 ok(V_VT(pdp->rgvarg+1) == VT_BOOL, "V_VT(psp->rgvargs+1) = %d\n", V_VT(pdp->rgvarg));
349 ok(V_BOOL(pdp->rgvarg+1), "%s\n", wine_dbgstr_w(V_BSTR(pdp->rgvarg)));
350 break;
351
352 default:
353 ok(0, "unexpected call\n");
354 return E_NOTIMPL;
355 }
356
357 return S_OK;
358}
359
360static IDispatchExVtbl globalObjVtbl = {
376};
377
379
381{
383 *ppv = iface;
384 return S_OK;
385 }
386
387 /* TODO: IClassFactoryEx */
388 *ppv = NULL;
389 return E_NOINTERFACE;
390}
391
393{
394 return 2;
395}
396
398{
399 return 1;
400}
401
403{
405
406 ok(!outer, "outer = %p\n", outer);
407 ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
408
410 *ppv = &testObj;
411 return CreateInstance_hres;
412}
413
415{
416 ok(0, "unexpected call\n");
417 return S_OK;
418}
419
420static const IClassFactoryVtbl ClassFactoryVtbl = {
426};
427
429
431{
432 ok(0, "unexpected call\n");
433 return E_NOINTERFACE;
434}
435
437{
438 return 2;
439}
440
442{
443 return 1;
444}
445
447 DWORD *pcbSecurityId, DWORD_PTR dwReserved)
448{
449 ok(0, "unexpected call\n");
450 return E_NOTIMPL;
451}
452
454 BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
455{
456 CHECK_EXPECT(ProcessUrlAction);
457
458 ok(dwAction == URLACTION_ACTIVEX_RUN, "dwAction = %lx\n", dwAction);
459 ok(pPolicy != NULL, "pPolicy == NULL\n");
460 ok(cbPolicy == sizeof(DWORD), "cbPolicy = %ld\n", cbPolicy);
461 ok(pContext != NULL, "pContext == NULL\n");
462 ok(cbContext == sizeof(GUID), "cbContext = %ld\n", cbContext);
463 ok(IsEqualGUID(pContext, &CLSID_TestObj), "pContext = %s\n", wine_dbgstr_guid((const IID*)pContext));
464 ok(!dwFlags, "dwFlags = %lx\n", dwFlags);
465 ok(!dwReserved, "dwReserved = %lx\n", dwReserved);
466
468 *(DWORD*)pPolicy = ProcessUrlAction_policy;
470}
471
473 BYTE **ppPolicy, DWORD *pcbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwReserved)
474{
475 const struct CONFIRMSAFETY *cs = (const struct CONFIRMSAFETY*)pContext;
476 DWORD *ret;
477
478 CHECK_EXPECT(QueryCustomPolicy);
479
480 ok(IsEqualGUID(&GUID_CUSTOM_CONFIRMOBJECTSAFETY, guidKey), "guidKey = %s\n", wine_dbgstr_guid(guidKey));
481
482 ok(ppPolicy != NULL, "ppPolicy == NULL\n");
483 ok(pcbPolicy != NULL, "pcbPolicy == NULL\n");
484 ok(pContext != NULL, "pContext == NULL\n");
485 ok(cbContext == sizeof(struct CONFIRMSAFETY), "cbContext = %ld\n", cbContext);
486 ok(!dwReserved, "dwReserved = %lx\n", dwReserved);
487
488 /* TODO: CLSID */
489 ok(cs->pUnk != NULL, "cs->pUnk == NULL\n");
490 ok(!cs->dwFlags, "dwFlags = %lx\n", cs->dwFlags);
491
494
496 *ppPolicy = (BYTE*)ret;
497 *pcbPolicy = QueryCustomPolicy_psize;
499 if(QueryCustomPolicy_psize >= sizeof(DWORD))
501
503}
504
505static const IInternetHostSecurityManagerVtbl InternetHostSecurityManagerVtbl = {
512};
513
515
517
519{
520 ok(0, "unexpected call\n");
521 return E_NOINTERFACE;
522}
523
525{
526 return 2;
527}
528
530{
531 return 1;
532}
533
535 REFGUID guidService, REFIID riid, void **ppv)
536{
537 if(IsEqualGUID(&SID_GetCaller, guidService))
538 return E_NOINTERFACE;
539
540 if(IsEqualGUID(&SID_SInternetHostSecurityManager, guidService)) {
541 if(iface == &ServiceProvider)
542 CHECK_EXPECT(Host_QS_SecMgr);
543 else
544 CHECK_EXPECT(Caller_QS_SecMgr);
545 ok(IsEqualGUID(&IID_IInternetHostSecurityManager, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
548 return QS_SecMgr_hres;
549 }
550
551 ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
552 return E_NOINTERFACE;
553}
554
555static IServiceProviderVtbl ServiceProviderVtbl = {
560};
561
563
565{
567 *ppv = iface;
568 }else if(IsEqualGUID(&IID_IActiveScriptSite, riid)) {
569 *ppv = iface;
570 }else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
572 }else {
573 *ppv = NULL;
574 return E_NOINTERFACE;
575 }
576
577 IUnknown_AddRef((IUnknown*)*ppv);
578 return S_OK;
579}
580
582{
583 return 2;
584}
585
587{
588 return 1;
589}
590
592{
593 *plcid = GetUserDefaultLCID();
594 return S_OK;
595}
596
598 DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
599{
600 ok(dwReturnMask == SCRIPTINFO_IUNKNOWN, "unexpected dwReturnMask %lx\n", dwReturnMask);
601 ok(!ppti, "ppti != NULL\n");
602 ok(!lstrcmpW(pstrName, L"test"), "pstrName = %s\n", wine_dbgstr_w(pstrName));
603
604 *ppiunkItem = (IUnknown*)&globalObj;
605 return S_OK;
606}
607
609{
610 return E_NOTIMPL;
611}
612
614 const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
615{
616 return E_NOTIMPL;
617}
618
620{
621 return E_NOTIMPL;
622}
623
625{
626 return E_NOTIMPL;
627}
628
630{
631 return E_NOTIMPL;
632}
633
635{
636 return E_NOTIMPL;
637}
638
639static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
651};
652
654
655static void set_safety_options(IUnknown *unk, BOOL use_sec_mgr)
656{
657 IObjectSafety *safety;
658 DWORD supported, enabled, options_all, options_set;
660
661 hres = IUnknown_QueryInterface(unk, &IID_IObjectSafety, (void**)&safety);
662 ok(hres == S_OK, "Could not get IObjectSafety: %08lx\n", hres);
663 if(FAILED(hres))
664 return;
665
666 options_all = INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER;
667 if(use_sec_mgr)
668 options_set = options_all;
669 else
670 options_set = INTERFACE_USES_DISPEX;
671
672 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, options_all, options_set);
673 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
674
675 supported = enabled = 0xdeadbeef;
676 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
677 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
678 ok(supported == options_all, "supported=%lx, expected %lx\n", supported, options_all);
679 ok(enabled == options_set, "enabled=%lx, expected %lx\n", enabled, options_set);
680
681 IObjectSafety_Release(safety);
682}
683
684#define parse_script(p,s) _parse_script(__LINE__,p,s)
685static void _parse_script(unsigned line, IActiveScriptParse *parser, const WCHAR *script)
686{
687 BSTR str;
689
693 ok_(__FILE__,line)(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
694}
695
696static HRESULT parse_script_e(IActiveScriptParse *parser, const WCHAR *script)
697{
698 BSTR str;
700
704
705 return hres;
706}
707
708static IActiveScriptParse *create_script(BOOL use_sec_mgr)
709{
710 IActiveScriptParse *parser;
713
716 ProcessUrlAction_policy = URLPOLICY_ALLOW;
720 QueryCustomPolicy_policy = URLPOLICY_ALLOW;
724
725 hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
726 &IID_IActiveScript, (void**)&script);
727 ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres);
728 if(FAILED(hres))
729 return NULL;
730
731 set_safety_options((IUnknown*)script, use_sec_mgr);
732
733 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
734 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
735
737 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
738
739 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
740 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
741
742 hres = IActiveScript_AddNamedItem(script, L"test",
743 SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS);
744 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
745
746 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
747 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08lx\n", hres);
748
749 IActiveScript_Release(script);
750
751 return parser;
752}
753
754static void test_CreateObject(void)
755{
756 IActiveScriptParse *parser;
758
760
761 SET_EXPECT(Host_QS_SecMgr);
762 SET_EXPECT(ProcessUrlAction);
764 SET_EXPECT(QueryCustomPolicy);
765 SET_EXPECT(QI_IObjectWithSite);
766 SET_EXPECT(reportSuccess);
767 parse_script(parser, L"Call CreateObject(\"Wine.Test\").reportSuccess()");
768 CHECK_CALLED(Host_QS_SecMgr);
769 CHECK_CALLED(ProcessUrlAction);
771 CHECK_CALLED(QueryCustomPolicy);
772 CHECK_CALLED(QI_IObjectWithSite);
773 CHECK_CALLED(reportSuccess);
774
776
778
779 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.TestABC\")");
780 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
781
783
786
787 SET_EXPECT(Host_QS_SecMgr);
788 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
789 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
790 CHECK_CALLED(Host_QS_SecMgr);
791
793
796
797 SET_EXPECT(Host_QS_SecMgr);
798 SET_EXPECT(ProcessUrlAction);
799 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
800 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
801 CHECK_CALLED(Host_QS_SecMgr);
802 CHECK_CALLED(ProcessUrlAction);
803
805
807 ProcessUrlAction_policy = URLPOLICY_DISALLOW;
808
809 SET_EXPECT(Host_QS_SecMgr);
810 SET_EXPECT(ProcessUrlAction);
811 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
812 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
813 CHECK_CALLED(Host_QS_SecMgr);
814 CHECK_CALLED(ProcessUrlAction);
815
817
820
821 SET_EXPECT(Host_QS_SecMgr);
822 SET_EXPECT(ProcessUrlAction);
824 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
825 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
826 CHECK_CALLED(Host_QS_SecMgr);
827 CHECK_CALLED(ProcessUrlAction);
829
831
834
835 SET_EXPECT(Host_QS_SecMgr);
836 SET_EXPECT(ProcessUrlAction);
838 SET_EXPECT(QueryCustomPolicy);
839 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
840 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
841 CHECK_CALLED(Host_QS_SecMgr);
842 CHECK_CALLED(ProcessUrlAction);
844 CHECK_CALLED(QueryCustomPolicy);
845
847
850
851 SET_EXPECT(Host_QS_SecMgr);
852 SET_EXPECT(ProcessUrlAction);
854 SET_EXPECT(QueryCustomPolicy);
855 SET_EXPECT(QI_IObjectWithSite);
856 SET_EXPECT(reportSuccess);
857 parse_script(parser, L"Call CreateObject(\"Wine.Test\").reportSuccess()");
858 CHECK_CALLED(Host_QS_SecMgr);
859 CHECK_CALLED(ProcessUrlAction);
861 CHECK_CALLED(QueryCustomPolicy);
862 CHECK_CALLED(QI_IObjectWithSite);
863 CHECK_CALLED(reportSuccess);
864
866
868 QueryCustomPolicy_policy = URLPOLICY_DISALLOW;
869
870 SET_EXPECT(Host_QS_SecMgr);
871 SET_EXPECT(ProcessUrlAction);
873 SET_EXPECT(QueryCustomPolicy);
874 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
875 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
876 CHECK_CALLED(Host_QS_SecMgr);
877 CHECK_CALLED(ProcessUrlAction);
879 CHECK_CALLED(QueryCustomPolicy);
880
882
883 SET_EXPECT(ProcessUrlAction);
885 SET_EXPECT(QueryCustomPolicy);
886 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
887 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
888 CHECK_CALLED(ProcessUrlAction);
890 CHECK_CALLED(QueryCustomPolicy);
891
892 QueryCustomPolicy_policy = URLPOLICY_ALLOW;
894
895 SET_EXPECT(ProcessUrlAction);
897 SET_EXPECT(QueryCustomPolicy);
898 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
899 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
900 CHECK_CALLED(ProcessUrlAction);
902 CHECK_CALLED(QueryCustomPolicy);
903
905
907
909 SET_EXPECT(QI_IObjectWithSite);
910 SET_EXPECT(reportSuccess);
911 parse_script(parser, L"Call CreateObject(\"Wine.Test\").reportSuccess()");
913 CHECK_CALLED(QI_IObjectWithSite);
914 CHECK_CALLED(reportSuccess);
915
917
920
921 SET_EXPECT(Host_QS_SecMgr);
922 SET_EXPECT(ProcessUrlAction);
924 SET_EXPECT(QueryCustomPolicy);
925 SET_EXPECT(QI_IObjectWithSite);
926 SET_EXPECT(SetSite);
927 SET_EXPECT(reportSuccess);
928 parse_script(parser, L"Call CreateObject(\"Wine.Test\").reportSuccess()");
929 CHECK_CALLED(Host_QS_SecMgr);
930 CHECK_CALLED(ProcessUrlAction);
932 CHECK_CALLED(QueryCustomPolicy);
933 CHECK_CALLED(QI_IObjectWithSite);
934 CHECK_CALLED(SetSite);
935 CHECK_CALLED(reportSuccess);
936
938 SET_EXPECT(ProcessUrlAction);
940 SET_EXPECT(QueryCustomPolicy);
941 SET_EXPECT(QI_IObjectWithSite);
942 SET_EXPECT(SetSite);
943 hres = parse_script_e(parser, L"Call CreateObject(\"Wine.Test\")");
944 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
945 CHECK_CALLED(ProcessUrlAction);
947 CHECK_CALLED(QueryCustomPolicy);
948 CHECK_CALLED(QI_IObjectWithSite);
949 CHECK_CALLED(SetSite);
950
952}
953
954static void test_GetObject(void)
955{
956 IActiveScriptParse *parser;
958
959 /* Never allowed with security manager */
961 hres = parse_script_e(parser, L"Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()");
962 ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08lx\n", hres);
964
966
967 SET_EXPECT(QI_IObjectWithSite);
968 SET_EXPECT(SetSite);
969 SET_EXPECT(reportSuccess);
970 hres = parse_script_e(parser, L"Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()");
971 if(broken(hres == VB_E_ACCESS_DENIED)) /* 64-bit win8 fails on the first try */
972 hres = parse_script_e(parser, L"Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()");
973 if(hres == HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND)) { /* Workaround for broken win2k */
974 win_skip("got unexpected error %08lx\n", hres);
975 CLEAR_CALLED(QI_IObjectWithSite);
976 CLEAR_CALLED(SetSite);
977 CLEAR_CALLED(reportSuccess);
979 return;
980 }
981 ok(hres == S_OK, "hres = %08lx\n", hres);
982 CHECK_CALLED(QI_IObjectWithSite);
983 CHECK_CALLED(SetSite);
984 CHECK_CALLED(reportSuccess);
985
987 SET_EXPECT(QI_IObjectWithSite);
988 SET_EXPECT(SetSite);
989 hres = parse_script_e(parser, L"Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()");
990 ok(hres == E_FAIL, "hres = %08lx\n", hres);
991 CHECK_CALLED(QI_IObjectWithSite);
992 CHECK_CALLED(SetSite);
993
995 SET_EXPECT(QI_IObjectWithSite);
996 SET_EXPECT(reportSuccess);
997 parse_script(parser, L"Call GetObject(\"clsid:" TESTOBJINST_CLSID "\").reportSuccess()");
998 CHECK_CALLED(QI_IObjectWithSite);
999 CHECK_CALLED(reportSuccess);
1000
1002
1003 /* Invalid moniker */
1005 hres = parse_script_e(parser, L"Call GetObject(\"nonexistent:test\").reportSuccess()");
1006 ok(hres == MK_E_SYNTAX, "hres = %08lx\n", hres);
1008}
1009
1010static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
1011{
1012 HKEY hkey;
1013 DWORD res;
1014
1015 if(!init) {
1017 return TRUE;
1018 }
1019
1021 if(res != ERROR_SUCCESS)
1022 return FALSE;
1023
1024 if(def_value)
1025 res = RegSetValueA(hkey, NULL, REG_SZ, def_value, strlen(def_value));
1026
1027 RegCloseKey(hkey);
1028
1029 return res == ERROR_SUCCESS;
1030}
1031
1033{
1034 return init_key("Wine.Test\\CLSID", TESTOBJ_CLSID, init);
1035}
1036
1038{
1039 DWORD regid;
1040 HRESULT hres;
1041
1042 if(!init_registry(TRUE)) {
1044 return FALSE;
1045 }
1046
1048 CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &regid);
1049 ok(hres == S_OK, "Could not register script engine: %08lx\n", hres);
1050
1052 CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &regid);
1053 ok(hres == S_OK, "Could not register script engine: %08lx\n", hres);
1054
1055 return TRUE;
1056}
1057
1059{
1060 IActiveScriptParseProcedure2 *vbscript;
1061 HRESULT hres;
1062
1063 hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
1064 &IID_IActiveScriptParseProcedure2, (void**)&vbscript);
1065 if(SUCCEEDED(hres))
1067
1068 return hres == S_OK;
1069}
1070
1071
1072START_TEST(createobj)
1073{
1075
1076 if(check_vbscript()) {
1077 if(register_activex()) {
1081 }else {
1082 skip("Could not register ActiveX object.\n");
1083 }
1084 }else {
1085 win_skip("Broken engine, probably too old\n");
1086 }
1087
1089}
@ SCRIPTSTATE_STARTED
Definition: activscp.idl:58
enum tagSCRIPTSTATE SCRIPTSTATE
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define broken(x)
Definition: atltest.h:178
#define START_TEST(x)
Definition: atltest.h:75
#define ok_(x1, x2)
Definition: atltest.h:61
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define RegCloseKey(hKey)
Definition: registry.h:49
static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: createobj.c:534
#define SET_EXPECT(func)
Definition: createobj.c:58
static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
Definition: createobj.c:586
static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: createobj.c:402
static ULONG WINAPI ObjectWithSite_Release(IObjectWithSite *iface)
Definition: createobj.c:131
static HRESULT CreateInstance_hres
Definition: createobj.c:94
#define CLEAR_CALLED(func)
Definition: createobj.c:79
static HRESULT WINAPI ActiveScriptSite_OnLeaveScript(IActiveScriptSite *iface)
Definition: createobj.c:634
static void set_safety_options(IUnknown *unk, BOOL use_sec_mgr)
Definition: createobj.c:655
static IClassFactory activex_cf
Definition: createobj.c:428
static void test_GetObject(void)
Definition: createobj.c:954
static ULONG WINAPI ObjectWithSite_AddRef(IObjectWithSite *iface)
Definition: createobj.c:126
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock)
Definition: createobj.c:414
static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
Definition: createobj.c:529
static IDispatchExVtbl globalObjVtbl
Definition: createobj.c:360
static IInternetHostSecurityManager InternetHostSecurityManager
Definition: createobj.c:514
static const IObjectWithSiteVtbl ObjectWithSiteVtbl
Definition: createobj.c:158
#define VB_E_CANNOT_CREATE_OBJ
Definition: createobj.c:118
static const GUID CLSID_TestObj
Definition: createobj.c:105
static HRESULT parse_script_e(IActiveScriptParse *parser, const WCHAR *script)
Definition: createobj.c:696
static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
Definition: createobj.c:619
static const IClassFactoryVtbl ClassFactoryVtbl
Definition: createobj.c:420
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
Definition: createobj.c:242
static HRESULT WINAPI InternetHostSecurityManager_QueryInterface(IInternetHostSecurityManager *iface, REFIID riid, void **ppv)
Definition: createobj.c:430
static ULONG WINAPI InternetHostSecurityManager_AddRef(IInternetHostSecurityManager *iface)
Definition: createobj.c:436
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
Definition: createobj.c:197
static DWORD ProcessUrlAction_policy
Definition: createobj.c:93
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: createobj.c:214
static BOOL init_registry(BOOL init)
Definition: createobj.c:1032
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
Definition: createobj.c:236
static HRESULT WINAPI InternetHostSecurityManager_GetSecurityId(IInternetHostSecurityManager *iface, BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
Definition: createobj.c:446
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
Definition: createobj.c:260
static BOOL check_vbscript(void)
Definition: createobj.c:1058
static IObjectWithSite ObjectWithSite
Definition: createobj.c:166
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: createobj.c:222
#define CHECK_EXPECT(func)
Definition: createobj.c:67
static HRESULT WINAPI ActiveScriptSite_GetDocVersionString(IActiveScriptSite *iface, BSTR *pbstrVersion)
Definition: createobj.c:608
static const GUID CLSID_TestObjInst
Definition: createobj.c:107
static HRESULT WINAPI InternetHostSecurityManager_QueryCustomPolicy(IInternetHostSecurityManager *iface, REFGUID guidKey, BYTE **ppPolicy, DWORD *pcbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwReserved)
Definition: createobj.c:472
static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
Definition: createobj.c:597
static void _parse_script(unsigned line, IActiveScriptParse *parser, const WCHAR *script)
Definition: createobj.c:685
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: createobj.c:397
#define DEFINE_EXPECT(func)
Definition: createobj.c:55
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
Definition: createobj.c:248
static DWORD QueryCustomPolicy_policy
Definition: createobj.c:97
#define IActiveScriptParse_InitNew
Definition: createobj.c:45
#define IActiveScriptParse_ParseScriptText
Definition: createobj.c:46
#define IActiveScriptParseProcedure2_Release
Definition: createobj.c:47
#define IActiveScriptParse_Release
Definition: createobj.c:44
#define DISPID_GLOBAL_OK
Definition: createobj.c:116
static IServiceProvider ServiceProvider
Definition: createobj.c:516
static HRESULT WINAPI ObjectWithSite_QueryInterface(IObjectWithSite *iface, REFIID riid, void **ppv)
Definition: createobj.c:120
static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
Definition: createobj.c:1010
#define parse_script(p, s)
Definition: createobj.c:684
#define VB_E_ACCESS_DENIED
Definition: createobj.c:53
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
Definition: createobj.c:254
static HRESULT WINAPI Test_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
Definition: createobj.c:266
const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY
Definition: createobj.c:111
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
Definition: createobj.c:170
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: createobj.c:380
static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
Definition: createobj.c:564
static ULONG WINAPI InternetHostSecurityManager_Release(IInternetHostSecurityManager *iface)
Definition: createobj.c:441
static HRESULT QI_IDispatch_hres
Definition: createobj.c:98
static HRESULT WINAPI ActiveScriptSite_OnEnterScript(IActiveScriptSite *iface)
Definition: createobj.c:629
static HRESULT ProcessUrlAction_hres
Definition: createobj.c:92
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
Definition: createobj.c:192
static HRESULT QI_IObjectWithSite_hres
Definition: createobj.c:99
#define CHECK_CALLED(func)
Definition: createobj.c:73
static ULONG WINAPI ActiveScriptSite_AddRef(IActiveScriptSite *iface)
Definition: createobj.c:581
#define TESTOBJ_CLSID
Definition: createobj.c:102
static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *iface, const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
Definition: createobj.c:613
static HRESULT QS_SecMgr_hres
Definition: createobj.c:91
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: createobj.c:392
static HRESULT WINAPI ObjectWithSite_SetSite(IObjectWithSite *iface, IUnknown *pUnkSite)
Definition: createobj.c:136
static const IInternetHostSecurityManagerVtbl InternetHostSecurityManagerVtbl
Definition: createobj.c:505
static DWORD QueryCustomPolicy_psize
Definition: createobj.c:96
static BOOL register_activex(void)
Definition: createobj.c:1037
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: createobj.c:208
#define TESTOBJINST_CLSID
Definition: createobj.c:103
static IDispatchEx globalObj
Definition: createobj.c:378
static void test_CreateObject(void)
Definition: createobj.c:754
static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: createobj.c:518
static IDispatchEx testObj
Definition: createobj.c:320
static HRESULT WINAPI InternetHostSecurityManager_ProcessUrlAction(IInternetHostSecurityManager *iface, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
Definition: createobj.c:453
static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
Definition: createobj.c:639
static IServiceProviderVtbl ServiceProviderVtbl
Definition: createobj.c:555
static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
Definition: createobj.c:334
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
Definition: createobj.c:230
static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
Definition: createobj.c:524
static HRESULT QueryCustomPolicy_hres
Definition: createobj.c:95
static HRESULT WINAPI ActiveScriptSite_GetLCID(IActiveScriptSite *iface, LCID *plcid)
Definition: createobj.c:591
static IActiveScriptSite ActiveScriptSite
Definition: createobj.c:653
const CLSID CLSID_VBScript
static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
Definition: createobj.c:624
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
Definition: createobj.c:202
static IObjectWithSite * object_with_site
Definition: createobj.c:168
static IDispatchExVtbl testObjVtbl
Definition: createobj.c:302
#define DISPID_TEST_REPORTSUCCESS
Definition: createobj.c:114
static HRESULT WINAPI ObjectWithSite_GetSite(IObjectWithSite *iface, REFIID riid, void **ppvSite)
Definition: createobj.c:152
static HRESULT SetSite_hres
Definition: createobj.c:100
static HRESULT WINAPI Test_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
Definition: createobj.c:278
static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
Definition: createobj.c:322
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegCreateKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1179
LONG WINAPI RegSetValueA(HKEY hKeyOriginal, LPCSTR lpSubKey, DWORD dwType, LPCSTR lpData, DWORD cbData)
Definition: reg.c:4954
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
Definition: reg.c:1224
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid, IUnknown *object, DWORD clscontext, DWORD flags, DWORD *cookie)
Definition: combase.c:2970
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
#define ERROR_MOD_NOT_FOUND
Definition: compat.h:104
OLECHAR * BSTR
Definition: compat.h:2293
@ VT_BSTR
Definition: compat.h:2303
@ VT_BOOL
Definition: compat.h:2306
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216
LCID lcid
Definition: locale.c:5660
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
#define regid
Definition: ecma_167.h:64
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
GLuint res
Definition: glext.h:9613
#define cs
Definition: i386-dis.c:442
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
static CInternetFolder * CreateInstance(void)
Definition: inetfolder.c:330
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
static IActiveScriptParse * create_script(void)
Definition: caller.c:673
#define wine_dbgstr_w
Definition: kernel32.h:34
#define REG_SZ
Definition: layer.c:22
#define win_skip
Definition: minitest.h:67
const IID IID_IObjectWithSite
HRESULT hres
Definition: protocol.c:465
static const WCHAR sp[]
Definition: suminfo.c:287
static IUnknown * outer
Definition: compobj.c:82
static VARIANTARG static DISPID
Definition: ordinal.c:49
script
Definition: msipriv.h:383
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define DWORD
Definition: nt_native.h:44
@ REGCLS_MULTIPLEUSE
Definition: objbase.h:398
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
const GUID IID_IDispatch
short WCHAR
Definition: pedump.c:58
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
const WCHAR * str
DWORD LCID
Definition: nls.h:13
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171
#define memset(x, y, z)
Definition: compat.h:39
Definition: scsiwmi.h:51
Definition: parser.c:49
Definition: import.c:81
uint32_t DWORD_PTR
Definition: typedefs.h:65
uint32_t ULONG
Definition: typedefs.h:59
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
Definition: winddi.h:3837
#define WINAPI
Definition: msvc.h:6
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479
#define MK_E_SYNTAX
Definition: winerror.h:3896
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
static int init
Definition: wintirpc.c:33
unsigned char BYTE
Definition: xxhash.c:193