ReactOS 0.4.17-dev-357-ga8f14ff
activex.c
Go to the documentation of this file.
1/*
2 * Copyright 2009 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 \
40 IActiveScriptParseProcedure2_64_Release
41#define IActiveScriptParseProcedure2_ParseProcedureText \
42 IActiveScriptParseProcedure2_64_ParseProcedureText
43
44#else
45
46#define IActiveScriptParse_QueryInterface IActiveScriptParse32_QueryInterface
47#define IActiveScriptParse_Release IActiveScriptParse32_Release
48#define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
49#define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
50#define IActiveScriptParseProcedure2_Release \
51 IActiveScriptParseProcedure2_32_Release
52#define IActiveScriptParseProcedure2_ParseProcedureText \
53 IActiveScriptParseProcedure2_32_ParseProcedureText
54
55#endif
56
57static const CLSID CLSID_JScript =
58 {0xf414c260,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}};
59
60#define DEFINE_EXPECT(func) \
61 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
62
63#define SET_EXPECT(func) \
64 expect_ ## func = TRUE
65
66#define CHECK_EXPECT2(func) \
67 do { \
68 ok(expect_ ##func, "unexpected call " #func "\n"); \
69 called_ ## func = TRUE; \
70 }while(0)
71
72#define CHECK_EXPECT(func) \
73 do { \
74 CHECK_EXPECT2(func); \
75 expect_ ## func = FALSE; \
76 }while(0)
77
78#define CHECK_CALLED(func) \
79 do { \
80 ok(called_ ## func, "expected " #func "\n"); \
81 expect_ ## func = called_ ## func = FALSE; \
82 }while(0)
83
85DEFINE_EXPECT(ProcessUrlAction);
86DEFINE_EXPECT(QueryCustomPolicy);
87DEFINE_EXPECT(reportSuccess);
88DEFINE_EXPECT(Host_QS_SecMgr);
89DEFINE_EXPECT(Caller_QS_SecMgr);
90DEFINE_EXPECT(QI_IObjectWithSite);
92
103
104#define TESTOBJ_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80646}"
105
106static const GUID CLSID_TestObj =
107 {0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}};
108
109/* Defined as extern in urlmon.idl, but not exported by uuid.lib */
111 {0x10200490,0xfa38,0x11d0,{0xac,0x0e,0x00,0xa0,0xc9,0xf,0xff,0xc0}};
112
113#define DISPID_TEST_REPORTSUCCESS 0x1000
114
115#define DISPID_GLOBAL_OK 0x2000
116
118{
119 ok(0, "unexpected call\n");
120 return E_NOTIMPL;
121}
122
124{
125 return 2;
126}
127
129{
130 return 1;
131}
132
134{
137
138
139 CHECK_EXPECT(SetSite);
140 ok(pUnkSite != NULL, "pUnkSite == NULL\n");
141
142 hres = IUnknown_QueryInterface(pUnkSite, &IID_IServiceProvider, (void**)&sp);
143 ok(hres == S_OK, "Could not get IServiceProvider iface: %08lx\n", hres);
144 IServiceProvider_Release(sp);
145
146 return SetSite_hres;
147}
148
150{
151 ok(0, "unexpected call\n");
152 return E_NOTIMPL;
153}
154
155static const IObjectWithSiteVtbl ObjectWithSiteVtbl = {
161};
162
164
166
168{
169 *ppv = NULL;
170
172 *ppv = iface;
173 }else if(IsEqualGUID(riid, &IID_IDispatch) || IsEqualGUID(riid, &IID_IDispatchEx)) {
175 return QI_IDispatch_hres;
176 *ppv = iface;
178 CHECK_EXPECT(QI_IObjectWithSite);
180 }else if(IsEqualGUID(&IID_IObjectSafety, riid)) {
181 ok(0, "Unexpected IID_IObjectSafety query\n");
182 }
183
184 return *ppv ? S_OK : E_NOINTERFACE;
185}
186
188{
189 return 2;
190}
191
193{
194 return 1;
195}
196
198{
199 ok(0, "unexpected call\n");
200 return E_NOTIMPL;
201}
202
204{
205 return E_NOTIMPL;
206}
207
209 LPOLESTR *rgszNames, UINT cNames,
210 LCID lcid, DISPID *rgDispId)
211{
212 ok(0, "unexpected call\n");
213 return E_NOTIMPL;
214}
215
217 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
218 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
219{
220 ok(0, "unexpected call\n");
221 return E_NOTIMPL;
222}
223
225{
226 ok(0, "unexpected call %s %lx\n", wine_dbgstr_w(bstrName), grfdex);
227 return E_NOTIMPL;
228}
229
231{
232 ok(0, "unexpected call\n");
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
260static HRESULT WINAPI Test_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
261{
262 if(!lstrcmpW(bstrName, L"reportSuccess")) {
263 ok(grfdex == fdexNameCaseSensitive, "grfdex = %lx\n", grfdex);
265 return S_OK;
266 }
267
268 ok(0, "unexpected name %s\n", wine_dbgstr_w(bstrName));
269 return E_NOTIMPL;
270}
271
272static HRESULT WINAPI Test_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
273 VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
274{
275 switch(id) {
277 CHECK_EXPECT(reportSuccess);
278
279 ok(wFlags == INVOKE_FUNC, "wFlags = %x\n", wFlags);
280 ok(pdp != NULL, "pdp == NULL\n");
281 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
282 ok(pdp->cArgs == 0, "cArgs = %d\n", pdp->cArgs);
283 ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
284 ok(!pvarRes, "pvarRes != NULL\n");
285 ok(pei != NULL, "pei == NULL\n");
286 break;
287
288 default:
289 ok(0, "unexpected call\n");
290 return E_NOTIMPL;
291 }
292
293 return S_OK;
294}
295
296static IDispatchExVtbl testObjVtbl = {
312};
313
315
316static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
317{
318 if(!lstrcmpW(bstrName, L"ok")) {
319 ok(grfdex == fdexNameCaseSensitive, "grfdex = %lx\n", grfdex);
321 return S_OK;
322 }
323
324 ok(0, "unexpected name %s\n", wine_dbgstr_w(bstrName));
325 return E_NOTIMPL;
326}
327
328static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
329 VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
330{
331 switch(id) {
332 case DISPID_GLOBAL_OK:
333 ok(wFlags == INVOKE_FUNC || wFlags == (INVOKE_FUNC|INVOKE_PROPERTYGET), "wFlags = %x\n", wFlags);
334 ok(pdp != NULL, "pdp == NULL\n");
335 ok(pdp->rgvarg != NULL, "rgvarg == NULL\n");
336 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
337 ok(pdp->cArgs == 2, "cArgs = %d\n", pdp->cArgs);
338 ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
339 ok(pei != NULL, "pei == NULL\n");
340
341 ok(V_VT(pdp->rgvarg) == VT_BSTR, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
342 ok(V_VT(pdp->rgvarg+1) == VT_BOOL, "V_VT(psp->rgvargs+1) = %d\n", V_VT(pdp->rgvarg));
343 ok(V_BOOL(pdp->rgvarg+1), "%s\n", wine_dbgstr_w(V_BSTR(pdp->rgvarg)));
344 break;
345
346 default:
347 ok(0, "unexpected call\n");
348 return E_NOTIMPL;
349 }
350
351 return S_OK;
352}
353
354static IDispatchExVtbl globalObjVtbl = {
370};
371
373
375{
377 *ppv = iface;
378 return S_OK;
379 }
380
381 /* TODO: IClassFactoryEx */
382 *ppv = NULL;
383 return E_NOINTERFACE;
384}
385
387{
388 return 2;
389}
390
392{
393 return 1;
394}
395
397{
399
400 ok(!outer, "outer = %p\n", outer);
401 ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
402
404 *ppv = &testObj;
405 return CreateInstance_hres;
406}
407
409{
410 ok(0, "unexpected call\n");
411 return S_OK;
412}
413
414static const IClassFactoryVtbl ClassFactoryVtbl = {
420};
421
423
425{
426 ok(0, "unexpected call\n");
427 return E_NOINTERFACE;
428}
429
431{
432 return 2;
433}
434
436{
437 return 1;
438}
439
441 DWORD *pcbSecurityId, DWORD_PTR dwReserved)
442{
443 ok(0, "unexpected call\n");
444 return E_NOTIMPL;
445}
446
448 BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
449{
450 CHECK_EXPECT(ProcessUrlAction);
451
452 ok(dwAction == URLACTION_ACTIVEX_RUN, "dwAction = %lx\n", dwAction);
453 ok(pPolicy != NULL, "pPolicy == NULL\n");
454 ok(cbPolicy == sizeof(DWORD), "cbPolicy = %ld\n", cbPolicy);
455 ok(pContext != NULL, "pContext == NULL\n");
456 ok(cbContext == sizeof(GUID), "cbContext = %ld\n", cbContext);
457 ok(IsEqualGUID(pContext, &CLSID_TestObj), "pContext = %s\n", wine_dbgstr_guid((const IID*)pContext));
458 ok(!dwFlags, "dwFlags = %lx\n", dwFlags);
459 ok(!dwReserved, "dwReserved = %lx\n", dwReserved);
460
462 *(DWORD*)pPolicy = ProcessUrlAction_policy;
464}
465
467 BYTE **ppPolicy, DWORD *pcbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwReserved)
468{
469 const struct CONFIRMSAFETY *cs = (const struct CONFIRMSAFETY*)pContext;
470 DWORD *ret;
471
472 CHECK_EXPECT(QueryCustomPolicy);
473
474 ok(IsEqualGUID(&GUID_CUSTOM_CONFIRMOBJECTSAFETY, guidKey), "guidKey = %s\n", wine_dbgstr_guid(guidKey));
475
476 ok(ppPolicy != NULL, "ppPolicy == NULL\n");
477 ok(pcbPolicy != NULL, "pcbPolicy == NULL\n");
478 ok(pContext != NULL, "pContext == NULL\n");
479 ok(cbContext == sizeof(struct CONFIRMSAFETY), "cbContext = %ld\n", cbContext);
480 ok(!dwReserved, "dwReserved = %lx\n", dwReserved);
481
482 /* TODO: CLSID */
483 ok(cs->pUnk != NULL, "cs->pUnk == NULL\n");
484 ok(!cs->dwFlags, "dwFlags = %lx\n", cs->dwFlags);
485
488
490 *ppPolicy = (BYTE*)ret;
491 *pcbPolicy = QueryCustomPolicy_psize;
493 if(QueryCustomPolicy_psize >= sizeof(DWORD))
495
497}
498
499static const IInternetHostSecurityManagerVtbl InternetHostSecurityManagerVtbl = {
506};
507
509
511
513{
514 ok(0, "unexpected call\n");
515 return E_NOINTERFACE;
516}
517
519{
520 return 2;
521}
522
524{
525 return 1;
526}
527
529 REFGUID guidService, REFIID riid, void **ppv)
530{
531 if(IsEqualGUID(&SID_GetCaller, guidService))
532 return E_NOINTERFACE;
533
534 if(IsEqualGUID(&SID_SInternetHostSecurityManager, guidService)) {
535 if(iface == &ServiceProvider)
536 CHECK_EXPECT(Host_QS_SecMgr);
537 else
538 CHECK_EXPECT(Caller_QS_SecMgr);
539 ok(IsEqualGUID(&IID_IInternetHostSecurityManager, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
542 return QS_SecMgr_hres;
543 }
544
545 ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
546 return E_NOINTERFACE;
547}
548
549static IServiceProviderVtbl ServiceProviderVtbl = {
554};
555
558
560{
562 *ppv = iface;
563 }else if(IsEqualGUID(&IID_IActiveScriptSite, riid)) {
564 *ppv = iface;
565 }else if(IsEqualGUID(&IID_IServiceProvider, riid) && AllowIServiceProvider) {
567 }else {
568 *ppv = NULL;
569 return E_NOINTERFACE;
570 }
571
572 IUnknown_AddRef((IUnknown*)*ppv);
573 return S_OK;
574}
575
577{
578 return 2;
579}
580
582{
583 return 1;
584}
585
587{
588 *plcid = GetUserDefaultLCID();
589 return S_OK;
590}
591
593 DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
594{
595 ok(dwReturnMask == SCRIPTINFO_IUNKNOWN, "unexpected dwReturnMask %lx\n", dwReturnMask);
596 ok(!ppti, "ppti != NULL\n");
597 ok(!lstrcmpW(pstrName, L"test"), "pstrName = %s\n", wine_dbgstr_w(pstrName));
598
599 *ppiunkItem = (IUnknown*)&globalObj;
600 return S_OK;
601}
602
604{
605 return E_NOTIMPL;
606}
607
609 const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
610{
611 return E_NOTIMPL;
612}
613
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
634#undef ACTSCPSITE_THIS
635
636static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
648};
649
651
652static void set_safety_options(IUnknown *unk, BOOL use_sec_mgr)
653{
654 IObjectSafety *safety;
655 DWORD supported, enabled, options_all, options_set;
657
658 hres = IUnknown_QueryInterface(unk, &IID_IObjectSafety, (void**)&safety);
659 ok(hres == S_OK, "Could not get IObjectSafety: %08lx\n", hres);
660 if(FAILED(hres))
661 return;
662
663 options_all = INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER;
664 if(use_sec_mgr)
665 options_set = options_all;
666 else
667 options_set = INTERFACE_USES_DISPEX;
668
669 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, options_all, options_set);
670 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
671
672 supported = enabled = 0xdeadbeef;
673 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
674 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
675 ok(supported == options_all, "supported=%lx, expected %lx\n", supported, options_all);
676 ok(enabled == options_set, "enabled=%lx, expected %lx\n", enabled, options_set);
677
678 IObjectSafety_Release(safety);
679}
680
681#define parse_script(p,s) _parse_script(__LINE__,p,s)
682static void _parse_script(unsigned line, IActiveScriptParse *parser, const WCHAR *script)
683{
685
687 ok_(__FILE__,line)(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
688}
689
690static IActiveScriptParse *create_script(BOOL skip_tests, BOOL use_sec_mgr)
691{
692 IActiveScriptParse *parser;
695
698 ProcessUrlAction_policy = URLPOLICY_ALLOW;
702 QueryCustomPolicy_policy = URLPOLICY_ALLOW;
706
707 hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
708 &IID_IActiveScript, (void**)&script);
709 if(!skip_tests)
710 ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres);
711 if(FAILED(hres))
712 return NULL;
713
714 if(!skip_tests)
715 set_safety_options((IUnknown*)script, use_sec_mgr);
716
717 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
718 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
719
721 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
722
723 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
724 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
725
726 hres = IActiveScript_AddNamedItem(script, L"test",
727 SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS);
728 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
729
730 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
731 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08lx\n", hres);
732
733 IActiveScript_Release(script);
734
735 if(!skip_tests) {
737 L"function testException(func, type, number) {\n"
738 L" try {\n"
739 L" func();\n"
740 L" }catch(e) {\n"
741 L" ok(e.name === type, 'e.name = ' + e.name + ', expected ' + type)\n"
742 L" ok(e.number === number, 'e.number = ' + e.number + ', expected ' + number);\n"
743 L" return;\n"
744 L" }\n"
745 L" ok(false, 'exception expected');\n"
746 L"}");
747 }
748
749 return parser;
750}
751
752static IDispatchEx *parse_procedure(IActiveScriptParse *parser, const WCHAR *src)
753{
754 IActiveScriptParseProcedure2 *parse_proc;
755 IDispatchEx *dispex;
756 IDispatch *disp;
758
759 hres = IActiveScriptParse_QueryInterface(parser, &IID_IActiveScriptParseProcedure2, (void**)&parse_proc);
760 ok(hres == S_OK, "Could not get IActiveScriptParseProcedure2: %08lx\n", hres);
761
764 ok(hres == S_OK, "ParseProcedureText failed: %08lx\n", hres);
765 ok(disp != NULL, "disp == NULL\n");
766
767 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
768 IDispatch_Release(disp);
769 ok(hres == S_OK, "Could not get IDispatchEx iface: %08lx\n", hres);
770
771 return dispex;
772}
773
774#define call_procedure(p,c) _call_procedure(__LINE__,p,c)
775static void _call_procedure(unsigned line, IDispatchEx *proc, IServiceProvider *caller)
776{
777 DISPPARAMS dp = {NULL,NULL,0,0};
778 EXCEPINFO ei = {0};
780
781 hres = IDispatchEx_InvokeEx(proc, DISPID_VALUE, 0, DISPATCH_METHOD, &dp, NULL, &ei, caller);
782 ok_(__FILE__,line)(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
783
784}
785
786static void test_ActiveXObject(void)
787{
788 IActiveScriptParse *parser;
790
792
793 SET_EXPECT(Host_QS_SecMgr);
794 SET_EXPECT(ProcessUrlAction);
796 SET_EXPECT(QueryCustomPolicy);
797 SET_EXPECT(QI_IObjectWithSite);
798 SET_EXPECT(reportSuccess);
799 parse_script(parser, L"(new ActiveXObject('Wine.Test')).reportSuccess();");
800 CHECK_CALLED(Host_QS_SecMgr);
801 CHECK_CALLED(ProcessUrlAction);
803 CHECK_CALLED(QueryCustomPolicy);
804 CHECK_CALLED(QI_IObjectWithSite);
805 CHECK_CALLED(reportSuccess);
806
807 proc = parse_procedure(parser, L"(new ActiveXObject('Wine.Test')).reportSuccess();");
808
809 SET_EXPECT(ProcessUrlAction);
811 SET_EXPECT(QueryCustomPolicy);
812 SET_EXPECT(QI_IObjectWithSite);
813 SET_EXPECT(reportSuccess);
815 CHECK_CALLED(ProcessUrlAction);
817 CHECK_CALLED(QueryCustomPolicy);
818 CHECK_CALLED(QI_IObjectWithSite);
819 CHECK_CALLED(reportSuccess);
820
821 SET_EXPECT(ProcessUrlAction);
823 SET_EXPECT(QueryCustomPolicy);
824 SET_EXPECT(QI_IObjectWithSite);
825 SET_EXPECT(reportSuccess);
827 CHECK_CALLED(ProcessUrlAction);
829 CHECK_CALLED(QueryCustomPolicy);
830 CHECK_CALLED(QI_IObjectWithSite);
831 CHECK_CALLED(reportSuccess);
832
833 IDispatchEx_Release(proc);
835
837 proc = parse_procedure(parser, L"(new ActiveXObject('Wine.Test')).reportSuccess();");
838
839 SET_EXPECT(Host_QS_SecMgr);
840 SET_EXPECT(ProcessUrlAction);
842 SET_EXPECT(QueryCustomPolicy);
843 SET_EXPECT(QI_IObjectWithSite);
844 SET_EXPECT(reportSuccess);
846 CHECK_CALLED(Host_QS_SecMgr);
847 CHECK_CALLED(ProcessUrlAction);
849 CHECK_CALLED(QueryCustomPolicy);
850 CHECK_CALLED(QI_IObjectWithSite);
851 CHECK_CALLED(reportSuccess);
852
853 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.TestABC'); }, 'Error', -2146827859);");
854
855 IDispatchEx_Release(proc);
857
860
861 SET_EXPECT(Host_QS_SecMgr);
862 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
863 CHECK_CALLED(Host_QS_SecMgr);
864
866
869
870 SET_EXPECT(Host_QS_SecMgr);
871 SET_EXPECT(ProcessUrlAction);
872 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
873 CHECK_CALLED(Host_QS_SecMgr);
874 CHECK_CALLED(ProcessUrlAction);
875
877
879 ProcessUrlAction_policy = URLPOLICY_DISALLOW;
880
881 SET_EXPECT(Host_QS_SecMgr);
882 SET_EXPECT(ProcessUrlAction);
883 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
884 CHECK_CALLED(Host_QS_SecMgr);
885 CHECK_CALLED(ProcessUrlAction);
886
888
891
892 SET_EXPECT(Host_QS_SecMgr);
893 SET_EXPECT(ProcessUrlAction);
895 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
896 CHECK_CALLED(Host_QS_SecMgr);
897 CHECK_CALLED(ProcessUrlAction);
899
901
904
905 SET_EXPECT(Host_QS_SecMgr);
906 SET_EXPECT(ProcessUrlAction);
908 SET_EXPECT(QueryCustomPolicy);
909 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
910 CHECK_CALLED(Host_QS_SecMgr);
911 CHECK_CALLED(ProcessUrlAction);
913 CHECK_CALLED(QueryCustomPolicy);
914
916
919
920 SET_EXPECT(Host_QS_SecMgr);
921 SET_EXPECT(ProcessUrlAction);
923 SET_EXPECT(QueryCustomPolicy);
924 SET_EXPECT(QI_IObjectWithSite);
925 SET_EXPECT(reportSuccess);
926 parse_script(parser, L"(new ActiveXObject('Wine.Test')).reportSuccess();");
927 CHECK_CALLED(Host_QS_SecMgr);
928 CHECK_CALLED(ProcessUrlAction);
930 CHECK_CALLED(QueryCustomPolicy);
931 CHECK_CALLED(QI_IObjectWithSite);
932 CHECK_CALLED(reportSuccess);
933
935
937 QueryCustomPolicy_policy = URLPOLICY_DISALLOW;
938
939 SET_EXPECT(Host_QS_SecMgr);
940 SET_EXPECT(ProcessUrlAction);
942 SET_EXPECT(QueryCustomPolicy);
943 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
944 CHECK_CALLED(Host_QS_SecMgr);
945 CHECK_CALLED(ProcessUrlAction);
947 CHECK_CALLED(QueryCustomPolicy);
948
950
951 SET_EXPECT(ProcessUrlAction);
953 SET_EXPECT(QueryCustomPolicy);
954 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
955 CHECK_CALLED(ProcessUrlAction);
957 CHECK_CALLED(QueryCustomPolicy);
958
959 QueryCustomPolicy_policy = URLPOLICY_ALLOW;
961
962 SET_EXPECT(ProcessUrlAction);
964 SET_EXPECT(QueryCustomPolicy);
965 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
966 CHECK_CALLED(ProcessUrlAction);
968 CHECK_CALLED(QueryCustomPolicy);
969
971
973
975 SET_EXPECT(QI_IObjectWithSite);
976 SET_EXPECT(reportSuccess);
977 parse_script(parser, L"(new ActiveXObject('Wine.Test')).reportSuccess();");
979 CHECK_CALLED(QI_IObjectWithSite);
980 CHECK_CALLED(reportSuccess);
981
983
986
987 SET_EXPECT(Host_QS_SecMgr);
988 SET_EXPECT(ProcessUrlAction);
990 SET_EXPECT(QueryCustomPolicy);
991 SET_EXPECT(QI_IObjectWithSite);
992 SET_EXPECT(SetSite);
993 SET_EXPECT(reportSuccess);
994 parse_script(parser, L"(new ActiveXObject('Wine.Test')).reportSuccess();");
995 CHECK_CALLED(Host_QS_SecMgr);
996 CHECK_CALLED(ProcessUrlAction);
998 CHECK_CALLED(QueryCustomPolicy);
999 CHECK_CALLED(QI_IObjectWithSite);
1000 CHECK_CALLED(SetSite);
1001 CHECK_CALLED(reportSuccess);
1002
1004 SET_EXPECT(ProcessUrlAction);
1006 SET_EXPECT(QueryCustomPolicy);
1007 SET_EXPECT(QI_IObjectWithSite);
1008 SET_EXPECT(SetSite);
1009 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
1010 CHECK_CALLED(ProcessUrlAction);
1012 CHECK_CALLED(QueryCustomPolicy);
1013 CHECK_CALLED(QI_IObjectWithSite);
1014 CHECK_CALLED(SetSite);
1015
1017
1018 /* No IServiceProvider Interface */
1022
1024 SET_EXPECT(QI_IObjectWithSite);
1025 SET_EXPECT(reportSuccess);
1026 SET_EXPECT(SetSite);
1027 parse_script(parser, L"(new ActiveXObject('Wine.Test')).reportSuccess();");
1029 CHECK_CALLED(QI_IObjectWithSite);
1030 CHECK_CALLED(reportSuccess);
1031 CHECK_CALLED(SetSite);
1032
1034
1038
1039 parse_script(parser, L"testException(function() { new ActiveXObject('Wine.Test'); }, 'Error', -2146827859);");
1040
1042}
1043
1044static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
1045{
1046 HKEY hkey;
1047 DWORD res;
1048
1049 if(!init) {
1051 return TRUE;
1052 }
1053
1055 if(res != ERROR_SUCCESS)
1056 return FALSE;
1057
1058 if(def_value)
1059 res = RegSetValueA(hkey, NULL, REG_SZ, def_value, strlen(def_value));
1060
1061 RegCloseKey(hkey);
1062
1063 return res == ERROR_SUCCESS;
1064}
1065
1067{
1068 return init_key("Wine.Test\\CLSID", TESTOBJ_CLSID, init);
1069}
1070
1072{
1073 DWORD regid;
1074 HRESULT hres;
1075
1076 if(!init_registry(TRUE)) {
1078 return FALSE;
1079 }
1080
1082 CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &regid);
1083 ok(hres == S_OK, "Could not register script engine: %08lx\n", hres);
1084
1085 return TRUE;
1086}
1087
1089{
1090 IActiveScriptProperty *script_prop;
1091 IActiveScriptParse *parser;
1092 HRESULT hres;
1093
1095 if(!parser)
1096 return FALSE;
1097
1098 hres = IActiveScriptParse_ParseScriptText(parser, L"if(!('localeCompare' in String.prototype)) throw 1;",
1099 NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
1100 if(hres == S_OK)
1101 hres = IActiveScriptParse_QueryInterface(parser, &IID_IActiveScriptProperty, (void**)&script_prop);
1103 if(hres == S_OK)
1104 IActiveScriptProperty_Release(script_prop);
1105
1106 return hres == S_OK;
1107}
1108
1110{
1112
1113 if(check_jscript()) {
1114 if(register_activex()) {
1117 }else {
1118 skip("Could not register ActiveX object\n");
1119 }
1120 }else {
1121 win_skip("Broken engine, probably too old\n");
1122 }
1123
1125}
@ SCRIPTSTATE_STARTED
Definition: activscp.idl:58
enum tagSCRIPTSTATE SCRIPTSTATE
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#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
#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
OLECHAR * BSTR
Definition: compat.h:2293
@ VT_BSTR
Definition: compat.h:2303
@ VT_BOOL
Definition: compat.h:2306
const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY
Definition: activex.c:29
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
GLenum src
Definition: glext.h:6340
#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 HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: activex.c:528
static BOOL check_jscript(void)
Definition: activex.c:1088
#define SET_EXPECT(func)
Definition: activex.c:63
static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
Definition: activex.c:581
static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: activex.c:396
static ULONG WINAPI ObjectWithSite_Release(IObjectWithSite *iface)
Definition: activex.c:128
static HRESULT CreateInstance_hres
Definition: activex.c:96
static HRESULT WINAPI ActiveScriptSite_OnLeaveScript(IActiveScriptSite *iface)
Definition: activex.c:629
static IServiceProvider caller_sp
Definition: activex.c:557
static void set_safety_options(IUnknown *unk, BOOL use_sec_mgr)
Definition: activex.c:652
static IClassFactory activex_cf
Definition: activex.c:422
static ULONG WINAPI ObjectWithSite_AddRef(IObjectWithSite *iface)
Definition: activex.c:123
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock)
Definition: activex.c:408
static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
Definition: activex.c:523
static IDispatchExVtbl globalObjVtbl
Definition: activex.c:354
static IInternetHostSecurityManager InternetHostSecurityManager
Definition: activex.c:508
static const IObjectWithSiteVtbl ObjectWithSiteVtbl
Definition: activex.c:155
static const GUID CLSID_TestObj
Definition: activex.c:106
static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
Definition: activex.c:614
static const IClassFactoryVtbl ClassFactoryVtbl
Definition: activex.c:414
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
Definition: activex.c:236
static HRESULT WINAPI InternetHostSecurityManager_QueryInterface(IInternetHostSecurityManager *iface, REFIID riid, void **ppv)
Definition: activex.c:424
static ULONG WINAPI InternetHostSecurityManager_AddRef(IInternetHostSecurityManager *iface)
Definition: activex.c:430
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
Definition: activex.c:192
static DWORD ProcessUrlAction_policy
Definition: activex.c:95
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: activex.c:208
static BOOL init_registry(BOOL init)
Definition: activex.c:1066
static const CLSID CLSID_JScript
Definition: activex.c:57
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
Definition: activex.c:230
static HRESULT WINAPI InternetHostSecurityManager_GetSecurityId(IInternetHostSecurityManager *iface, BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
Definition: activex.c:440
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
Definition: activex.c:254
static IObjectWithSite ObjectWithSite
Definition: activex.c:163
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: activex.c:216
#define IActiveScriptParseProcedure2_ParseProcedureText
Definition: activex.c:52
static void test_ActiveXObject(void)
Definition: activex.c:786
#define CHECK_EXPECT(func)
Definition: activex.c:72
#define call_procedure(p, c)
Definition: activex.c:774
static HRESULT WINAPI ActiveScriptSite_GetDocVersionString(IActiveScriptSite *iface, BSTR *pbstrVersion)
Definition: activex.c:603
static HRESULT WINAPI InternetHostSecurityManager_QueryCustomPolicy(IInternetHostSecurityManager *iface, REFGUID guidKey, BYTE **ppPolicy, DWORD *pcbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwReserved)
Definition: activex.c:466
static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
Definition: activex.c:592
static void _parse_script(unsigned line, IActiveScriptParse *parser, const WCHAR *script)
Definition: activex.c:682
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: activex.c:391
#define DEFINE_EXPECT(func)
Definition: activex.c:60
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
Definition: activex.c:242
static DWORD QueryCustomPolicy_policy
Definition: activex.c:99
#define IActiveScriptParse_InitNew
Definition: activex.c:48
#define IActiveScriptParse_ParseScriptText
Definition: activex.c:49
#define IActiveScriptParseProcedure2_Release
Definition: activex.c:50
#define IActiveScriptParse_Release
Definition: activex.c:47
#define DISPID_GLOBAL_OK
Definition: activex.c:115
static BOOL AllowIServiceProvider
Definition: activex.c:102
static IServiceProvider ServiceProvider
Definition: activex.c:510
static HRESULT WINAPI ObjectWithSite_QueryInterface(IObjectWithSite *iface, REFIID riid, void **ppv)
Definition: activex.c:117
static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
Definition: activex.c:1044
#define parse_script(p, s)
Definition: activex.c:681
static IDispatchEx * parse_procedure(IActiveScriptParse *parser, const WCHAR *src)
Definition: activex.c:752
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
Definition: activex.c:248
static HRESULT WINAPI Test_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
Definition: activex.c:260
#define IActiveScriptParse_QueryInterface
Definition: activex.c:46
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
Definition: activex.c:167
static void _call_procedure(unsigned line, IDispatchEx *proc, IServiceProvider *caller)
Definition: activex.c:775
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: activex.c:374
static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
Definition: activex.c:559
static ULONG WINAPI InternetHostSecurityManager_Release(IInternetHostSecurityManager *iface)
Definition: activex.c:435
static HRESULT QI_IDispatch_hres
Definition: activex.c:100
static HRESULT WINAPI ActiveScriptSite_OnEnterScript(IActiveScriptSite *iface)
Definition: activex.c:624
static HRESULT ProcessUrlAction_hres
Definition: activex.c:94
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
Definition: activex.c:187
#define CHECK_CALLED(func)
Definition: activex.c:78
static ULONG WINAPI ActiveScriptSite_AddRef(IActiveScriptSite *iface)
Definition: activex.c:576
#define TESTOBJ_CLSID
Definition: activex.c:104
static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *iface, const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
Definition: activex.c:608
static HRESULT QS_SecMgr_hres
Definition: activex.c:93
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: activex.c:386
static HRESULT WINAPI ObjectWithSite_SetSite(IObjectWithSite *iface, IUnknown *pUnkSite)
Definition: activex.c:133
static const IInternetHostSecurityManagerVtbl InternetHostSecurityManagerVtbl
Definition: activex.c:499
static DWORD QueryCustomPolicy_psize
Definition: activex.c:98
static BOOL register_activex(void)
Definition: activex.c:1071
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: activex.c:203
static IDispatchEx globalObj
Definition: activex.c:372
static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: activex.c:512
static IDispatchEx testObj
Definition: activex.c:314
static HRESULT WINAPI InternetHostSecurityManager_ProcessUrlAction(IInternetHostSecurityManager *iface, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
Definition: activex.c:447
static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
Definition: activex.c:636
static IServiceProviderVtbl ServiceProviderVtbl
Definition: activex.c:549
static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
Definition: activex.c:328
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
Definition: activex.c:224
static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
Definition: activex.c:518
static HRESULT QueryCustomPolicy_hres
Definition: activex.c:97
static HRESULT WINAPI ActiveScriptSite_GetLCID(IActiveScriptSite *iface, LCID *plcid)
Definition: activex.c:586
static IActiveScriptSite ActiveScriptSite
Definition: activex.c:650
static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
Definition: activex.c:619
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
Definition: activex.c:197
static IObjectWithSite * object_with_site
Definition: activex.c:165
static IDispatchExVtbl testObjVtbl
Definition: activex.c:296
#define DISPID_TEST_REPORTSUCCESS
Definition: activex.c:113
static HRESULT WINAPI ObjectWithSite_GetSite(IObjectWithSite *iface, REFIID riid, void **ppvSite)
Definition: activex.c:149
static HRESULT SetSite_hres
Definition: activex.c:101
static HRESULT WINAPI Test_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
Definition: activex.c:272
static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
Definition: activex.c:316
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
#define V_BOOL(A)
Definition: oleauto.h:224
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
const GUID IID_IDispatch
static HANDLE proc()
Definition: pdb.c:32
short WCHAR
Definition: pedump.c:58
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
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
#define E_NOINTERFACE
Definition: winerror.h:3479
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
static int init
Definition: wintirpc.c:33
unsigned char BYTE
Definition: xxhash.c:193