1 //------------------------------------------------------------------------------
2 // <copyright file="_ComImports.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 //------------------------------------------------------------------------------
7 #define AUTOPROXY_MANAGED_JSCRIPT
8 #if !AUTOPROXY_MANAGED_JSCRIPT
10 namespace System.Net.ComImports
12 using System.Runtime.InteropServices;
13 using EXCEPINFO = System.Runtime.InteropServices.ComTypes.EXCEPINFO;
21 TYPE_E_ELEMENTNOTFOUND = unchecked((int) 0x8002802B),
22 SCRIPT_E_REPORTED = unchecked((int) 0x80020101),
23 E_NOTIMPL = unchecked((int)0x80004001),
24 E_NOINTERFACE = unchecked((int)0x80004002),
31 // Scripting Interfaces
34 internal enum ScriptState : uint
44 internal enum ScriptThreadState : uint
51 internal enum ScriptText : uint
55 DelayExecution = 0x0001,
57 IsExpression = 0x0020,
58 IsPersistent = 0x0040,
59 HostManageSource = 0x0080,
63 internal enum ScriptItem : uint
69 GlobalMembers = 0x0008,
70 IsPersistent = 0x0040,
76 internal enum ScriptInfo : uint
85 // A "fake" interface to use to interact with the script itself through IDispatch.
86 // It uses the IDispatch guid. New methods can be added as needed in any order.
89 [Guid("00020400-0000-0000-C000-000000000046")]
90 [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
91 internal interface IScript
93 object FindProxyForURL(string url, string host);
97 [Guid("BB1A2AE1-A4F9-11cf-8F20-00805F2CD064")]
98 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
99 internal interface IActiveScript
101 void SetScriptSite(IActiveScriptSite pass);
102 void GetScriptSite(Guid riid, out IntPtr site);
103 void SetScriptState(ScriptState state);
104 void GetScriptState(out ScriptState scriptState);
106 void AddNamedItem(string name, ScriptItem flags);
107 void AddTypeLib(Guid typeLib, uint major, uint minor, uint flags);
108 void GetScriptDispatch(string itemName, out IScript dispatch);
109 void GetCurrentScriptThreadID(out uint thread);
110 void GetScriptThreadID(uint win32ThreadId, out uint thread);
111 void GetScriptThreadState(uint thread, out ScriptThreadState state);
112 void InterruptScriptThread(uint thread, out EXCEPINFO exceptionInfo, uint flags);
113 void Clone(out IActiveScript script);
117 [Guid("DB01A1E3-A42B-11cf-8F20-00805F2CD064")]
118 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
119 internal interface IActiveScriptSite
121 void GetLCID(out int lcid);
124 ScriptInfo returnMask,
125 [Out] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.IUnknown)] object[] item,
126 [Out] [MarshalAs(UnmanagedType.LPArray)] IntPtr[] typeInfo);
127 void GetDocVersionString(out string version);
128 void OnScriptTerminate(object result, EXCEPINFO exceptionInfo);
129 void OnStateChange(ScriptState scriptState);
130 void OnScriptError(IActiveScriptError scriptError);
131 void OnEnterScript();
132 void OnLeaveScript();
135 internal enum UrlPolicy {
139 [ComImport(), Guid("6D5140C1-7436-11CE-8034-00AA006009FA"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
140 internal interface IOleServiceProvider {
142 int QueryService([In] ref Guid guidService, [In] ref Guid riid, [Out] out IntPtr ppvObject);
145 internal static class ComConstants {
146 public const int INTERFACE_USES_SECURITY_MANAGER = 0x00000008; // Object knows to use IInternetHostSecurityManager
150 [Guid("CB5BDC81-93C1-11cf-8F20-00805F2CD064")]
151 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
152 internal interface IObjectSafety
154 [return: MarshalAs(UnmanagedType.I4)]
156 int GetInterfaceSafetyOptions(ref Guid riid, [Out] out int pdwSupportedOptions, [Out] out int pdwEnabledOptions);
158 [return: MarshalAs(UnmanagedType.I4)]
160 int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions);
164 [Guid("3af280b6-cb3f-11d0-891e-00c04fb6bfc4")]
165 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
166 internal interface IInternetHostSecurityManager
168 [return: MarshalAs(UnmanagedType.I4)]
170 int GetSecurityId([Out] byte[] pbSecurityId, [In, Out]ref IntPtr pcbSecurityId, IntPtr dwReserved);
172 [return: MarshalAs(UnmanagedType.I4)]
174 int ProcessUrlAction(int dwAction, [Out] int[] pPolicy, int cbPolicy, [Out] byte[] pContext, int cbContext, int dwFlags, int dwReserved);
176 [return: MarshalAs(UnmanagedType.I4)]
178 int QueryCustomPolicy(Guid guidKey, [Out] out byte[] ppPolicy, [Out] out int pcbPolicy, byte[] pContext, int cbContext, int dwReserved);
182 [Guid("EAE1BA61-A4ED-11cf-8F20-00805F2CD064")]
183 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
184 internal interface IActiveScriptError
186 void GetExceptionInfo(out EXCEPINFO exceptionInfo);
187 void GetSourcePosition(out uint sourceContext, out uint lineNumber, out int characterPosition);
188 void GetSourceLineText(out string sourceLine);
192 [Guid("BB1A2AE2-A4F9-11cf-8F20-00805F2CD064")]
193 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
194 internal interface IActiveScriptParse32
205 IntPtr sourceContextCookie,
206 uint startingLineNumber,
209 out EXCEPINFO exceptionInfo);
211 void ParseScriptText(
214 [MarshalAs(UnmanagedType.IUnknown)] object context,
216 IntPtr sourceContextCookie,
217 uint startingLineNumber,
219 [MarshalAs(UnmanagedType.Struct)] out object result,
220 out EXCEPINFO exceptionInfo);
224 [Guid("C7EF7658-E1EE-480E-97EA-D52CB4D76D17")]
225 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
226 internal interface IActiveScriptParse64
237 IntPtr sourceContextCookie,
238 uint startingLineNumber,
241 out EXCEPINFO exceptionInfo);
243 void ParseScriptText(
246 [MarshalAs(UnmanagedType.IUnknown)] object context,
248 IntPtr sourceContextCookie,
249 uint startingLineNumber,
251 [MarshalAs(UnmanagedType.Struct)] out object result,
252 out EXCEPINFO exceptionInfo);
255 // Use this helper to deal with the fact that two interfaces with different Guids are required on 32 vs. 64 bit.
256 internal class ActiveScriptParseWrapper
258 private readonly IActiveScriptParse32 asp32;
259 private readonly IActiveScriptParse64 asp64;
261 internal ActiveScriptParseWrapper(object comObject)
263 if (IntPtr.Size == 4)
265 asp32 = (IActiveScriptParse32) comObject;
269 asp64 = (IActiveScriptParse64) comObject;
273 internal void InitNew()
285 internal void AddScriptlet(
292 IntPtr sourceContextCookie,
293 uint startingLineNumber,
296 out EXCEPINFO exceptionInfo)
300 asp32.AddScriptlet(defaultName, code, itemName, subItemName, eventName,
301 delimiter, sourceContextCookie, startingLineNumber, flags, out name, out exceptionInfo);
305 asp64.AddScriptlet(defaultName, code, itemName, subItemName, eventName,
306 delimiter, sourceContextCookie, startingLineNumber, flags, out name, out exceptionInfo);
310 internal void ParseScriptText(
313 [MarshalAs(UnmanagedType.IUnknown)] object context,
315 IntPtr sourceContextCookie,
316 uint startingLineNumber,
318 [MarshalAs(UnmanagedType.Struct)] out object result,
319 out EXCEPINFO exceptionInfo)
323 asp32.ParseScriptText(code, itemName, context, delimiter, sourceContextCookie,
324 startingLineNumber, flags, out result, out exceptionInfo);
328 asp64.ParseScriptText(code, itemName, context, delimiter, sourceContextCookie,
329 startingLineNumber, flags, out result, out exceptionInfo);
340 [Guid("f414c260-6ac0-11cf-b6d1-00aa00bbbb58")]
341 internal class JScriptEngine { }