PC Review


Reply
Thread Tools Rate Thread

Accessing the Object Model from Within an ActiveX UserControl

 
 
New Member
Join Date: Jul 2008
Posts: 1
 
      9th Jul 2008
I have been working on an ActiveX component that will be embedded in IE 7.

I've got a problem that I have narrowed down (at least I think I narrowed it down ) to a SecurityPermission problem, but haven't had any luck getting it to work.

I'm including part of the code with exception information included.
Code:
 try
 			{
 				SecurityPermission perm = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
 
 				//###########################
 				//Assert throws exception
 				//Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
 
 				//Stack: at System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission demand, StackCrawlMark stackMark, Int32 unrestrcitedOverride, Int32 create) 
 				perm.Assert();
 				//###########################			  
 
 				// Now typeIOleObject has all the required information about class IOleObject
 				Type typeIOleObject = this.GetType().GetInterface("IOleObject", true);
 
 				//###########################
 				//InvokeMember throws exception
 				//Message: IOleObject.GetClientSite()
 				//Stack: 
 				//	   at System.Reflection.MethodBase.PerformSecurityCheck(Object obj, RuntimeMethodHandle method, IntPtr parent, UInt32 invocationFlags)
 				//	   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
 				//First permission failed: System.Security.PermissionSet
 				object oleClientSite = typeIOleObject.InvokeMember("GetClientSite", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, this, null);
 								
 				//Also tried:  typeIOleObject.InvokeMember("GetClientSite", BindingFlags.InvokeMethod, null, this, null);
 				//###########################
 
 				IServiceProvider serviceProvider = oleClientSite as IServiceProvider;
 				Guid guidIServiceProvider = typeof(IServiceProvider).GUID;
 				object objIServiceProvider;
 				serviceProvider.QueryService(ref SID_STopLevelBrowser, ref guidIServiceProvider, out objIServiceProvider);
 				serviceProvider = objIServiceProvider as IServiceProvider;
 				object objIWebBrowser;
 				Guid guidIWebBrowser = typeof(IWebBrowser).GUID;
 				serviceProvider.QueryService(ref SID_SWebBrowserApp, ref guidIWebBrowser, out objIWebBrowser);
 				IWebBrowser webBrowser = objIWebBrowser as IWebBrowser;
 				MessageBox.Show(webBrowser.LocationURL);
 				object flags = null;
 				object targetFrameName = null;
 				object postData = null;
 				object headers = null;
 				webBrowser.Navigate("about:blank", ref flags, ref targetFrameName, ref postData, ref headers);
 				Console.WriteLine("Called unmanaged code with permission.");
 			}
 			catch (SecurityException ex)
 			{
 				MessageBox.Show(ex.Message + "\n\nStack:" + ex.StackTrace + "\n\nData:" + ex.Data + "\n\nSource:" + ex.Source);
 				MessageBox.Show("\n\nTo String:" + ex.ToString() + "\n\nInner" + ex.InnerException + "\n\nFirst permission failed" + ex.FirstPermissionThatFailed);
 			 }
 			catch (Exception e)
 			{
 				MessageBox.Show(e.Message + "\n\nStack:" + e.StackTrace + "\n\nData:" + e.Data + "\n\nSource:" + e.Source + "\n\nTo String:" + e.ToString() + "\n\nInner" + e.InnerException);
 			}
Wrapper around IWebBrowser
Code:
	  //from shlguid.h
 		Guid SID_STopLevelBrowser = new Guid(0x4C96BE40, 0x915C, 0x11CF, 0x99,
 			0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
 		Guid SID_SWebBrowserApp = new Guid(0x0002DF05, 0x0000, 0x0000, 0xC0,
 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
 
 		[ComImport, Guid("6d5140c1-7436-11ce-8034-00aa006009fa"),
 			InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 		public interface IServiceProvider
 		{
 			void QueryService(ref Guid guidService, ref Guid riid,
 		[MarshalAs(UnmanagedType.Interface)] out object ppvObject);
 		}
 
 		[ComImport, TypeLibType((short)0x1050),
 		Guid("EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B")]
 		public interface IWebBrowser
 		{
 			[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(100)]
 			 void GoBack();
 			
 			[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x65)]
 			void GoForward();
 			
 			[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x66)]
 			void GoHome();
 			
 			[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x67)]
 			void GoSearch();
 			
 			[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x68)]
 			void Navigate([In, MarshalAs(UnmanagedType.BStr)] string URL, [In,
 				Optional, MarshalAs(UnmanagedType.Struct)] ref object Flags, [In, Optional,
 				MarshalAs(UnmanagedType.Struct)] ref object TargetFrameName, [In, Optional,
 				MarshalAs(UnmanagedType.Struct)] ref object PostData, [In, Optional,
 				MarshalAs(UnmanagedType.Struct)] ref object Headers);
 
 			[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(-550)]
 			void Refresh();
 			
 			[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x69)]
 			void Refresh2([In, Optional, MarshalAs(UnmanagedType.Struct)] ref object Level);
 			
 			[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x6a)]
 			void Stop();
 			
 			[DispId(200)]
 			object Application
 			{
 				[return: MarshalAs(UnmanagedType.IDispatch)]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(200)]
 				get;
 			}
 			
 			[DispId(0xc9)]
 			object Parent
 			{
 				[return: MarshalAs(UnmanagedType.IDispatch)]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xc9)]
 				get;
 			}
 			
 			[DispId(0xca)]
 			object Container
 			{
 				[return: MarshalAs(UnmanagedType.IDispatch)]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xca)]
 				get;
 			}
 			
 			[DispId(0xcb)]
 			object Document
 			{
 				[return: MarshalAs(UnmanagedType.IDispatch)]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xcb)]
 				get;
 			}
 			
 			[DispId(0xcc)]
 			bool TopLevelContainer { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xcc)] get; }
 			[DispId(0xcd)]
 			string Type
 			{
 				[return: MarshalAs(UnmanagedType.BStr)]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xcd)]
 				get;
 			}
 			
 			[DispId(0xce)]
 			int Left
 			{
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xce)]
 				get;
 				[param: In]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xce)]
 				set;
 			}
 			
 			[DispId(0xcf)]
 			int Top
 			{
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xcf)]
 				get;
 				[param: In]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xcf)]
 				set;
 			}
 			
 			[DispId(0xd0)]
 			int Width
 			{
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xd0)]
 				get;
 				[param: In]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xd0)]
 				set;
 			}
 			
 			[DispId(0xd1)]
 			int Height
 			{
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xd1)]
 				get;
 				[param: In]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xd1)]
 				set;
 			}
 			
 			[DispId(210)]
 			string LocationName
 			{
 				[return: MarshalAs(UnmanagedType.BStr)]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(210)]
 				get;
 			}
 			
 			[DispId(0xd3)]
 			string LocationURL
 			{
 				[return: MarshalAs(UnmanagedType.BStr)]
 				[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xd3)]
 				get;
 			}
 			
 			[DispId(0xd4)]
 			bool Busy { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0xd4)] get; }
 		}

If it helps any, I have been using this website and this Microsoft support page as references for my code.

Can anyone see what I am doing wrong?



Thanks in advance!
 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Java accessing Outlook object model ? Bert_Bert Microsoft Outlook Discussion 1 18th Jul 2008 05:49 AM
accessing document object model (DOM) using vb and asp.net Randall Arnold Microsoft VB .NET 20 17th Jan 2006 07:55 AM
Accessing outlook object model Girish NS Microsoft C# .NET 3 9th Sep 2004 06:53 PM
wrote a activex dll using object model (mapi) xSMOKEx Microsoft Outlook VBA Programming 1 6th Apr 2004 02:20 PM
Re: Accessing the VBA project object model Tom Ogilvy Microsoft Excel Programming 0 8th Jul 2003 02:47 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 08:04 PM.